Python中的负RegEx模式匹配等价于Perl(!~操作员)

2024-09-28 20:19:45 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有什么方法可以完全反向匹配我使用的正则表达式。在

(?!...)仅对简单模式有效。我的意思是我有一个正则表达式来匹配多种格式,但我想替换字符串中的所有内容,除了我的多格式。在

例如:我编写了一个复杂的RegEx模式来查找周、日、时、月、年。不必寻找这些匹配项并使用这些模式拆分字符串并连接所有匹配项;如果存在反向匹配,我可以直接替换它。在

How to "inverse match" with 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)

输出

^{pr2}$

但在这里我不见了"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"。在

我可以修改我的正则表达式来包含这个模式

但是,除了这样做,有没有办法我可以删除除星期一/星期二/。。。。&星期一/星期二/星期三(amp;M)。。。&上午11:00/12:00。。。在

也就是说,我想要的就是这个输出: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


Tags: to字符串re内容格式模式hrmonday