有什么办法可以对我使用的正则表达式进行完全反向匹配。
(?!...)
仅适用于简单模式。我的意思是我有一个RegEx可以匹配多种格式,但是我想替换字符串中除多种格式外的所有内容。
举例来说:我编写了一个复杂的RegEx模式来查找工作日,小时,月,年。而不是找到这些匹配项,而是使用这些模式来分割字符串并加入所有匹配项;如果存在逆向匹配,我可以单次替换。
如何与正则表达式“逆向匹配”中给出的解决方案?不支持所有内容。
例子
hr = """
Monday: 11:30am - 9:30pm Tuesday: 11:30am - 9:30pm
Wednesday: 11:30am - 10:00pm Thursday: 11:30am - 10:00pm
Friday: 11:30am - 10:30pm Saturday: 11:00am - 10:30pm
(brunch served until 3pm) Sunday: 10:30am - 9:30pm (brunch served until 3pm)
Happy Hour and Special Appetizer menu starting at $3 in the bar. Hours from 4 - 7pm Daily.
$4 BURGER special available on Monday. Wednesday: 1/2 off all bottled wines (4-close)"""
import re
newStr = []
dayPattern = """
(?:mon|tue|wed|thu|fri|sat|sun|thurs)(?:day)?(?:[.:])*
\s*
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?) # Start hour
\s*[-|to]+\s*
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?) # Close hour
"""
newStr.extend(\
re.findall(re.compile(dayPattern, re.VERBOSE|re.IGNORECASE), hr))
print " ".join(newStr)
输出
Monday: 11:30am - 9:30pm Thursday: 11:30am - 10:00pm Friday: 11:30am - 10:30pm Sunday: 10:30am - 9:30pm
但是我在这里失踪了"Monday: 11:30am - 9:30pm Tuesday: 11:30am - 9:30pm Wednesday: 11:30am - 10:00pm Thursday: 11:30am - 10:00pm Friday: 11:30am - 10:30pm"
。
我可以修改我的正则表达式以也包括此模式
但是除了这样,我可以删除星期一/星期二/ ...,周一/周二/周三和11:00 am/12pm以外的任何单词。
即,正是我想要的是此输出: Monday: 11:30am - 9:30pm Tuesday: 11:30am - 9:30pm Wednesday: 11:30am - 10:00pm Thursday: 11:30am - 10:00pm Friday: 11:30am - 10:30pm Saturday: 11:00am - 10:30pm Sunday: 10:30am - 9:30pm
我不明白您打算进行反向正则表达式的意图。findall()
似乎是一种选择时间的自然方法,例如:
' '.join(re.findall(r'\w{3,6}day:\s*\d{1,2}:\d{1,2}[ap]m\s*-\s*\d{1,2}:\d{1,2}[ap]m', hr))
它产生:
'Monday: 11:30am - 9:30pm Tuesday: 11:30am - 9:30pm Wednesday: 11:30am - 10:00pm Thursday: 11:30am - 10:00pm Friday: 11:30am - 10:30pm Saturday: 11:00am - 10:30pm Sunday: 10:30am - 9:30pm'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句