我试图用“早午餐”来代替“早午餐”这一作品。我使用的正则表达式可以正确识别事件,但是当我尝试使用回复sub它取代的文本比所识别的要多关于芬德尔. 我使用的正则表达式是:
re.compile(r'(?:^|\.)(?![^.]*saturday)(?![^.]*sunday)(?![^.]*weekend)[^.]*(brunch)',re.IGNORECASE)
字符串是
str = 'Valid only for dine-in January 2 - March 31, 2015. Excludes brunch, happy hour, holidays, and February 13 - 15, 2015.'
我想让它产生:
'Valid only for dine-in January 2 - March 31, 2015. Excludes BRUNCH, happy hour, holidays, and February 13 - 15, 2015.'
步骤如下:
>>> reg.findall(str)
>>> ['brunch']
>>> reg.sub('BRUNCH',str)
>>> Valid only for dine-in January 2 - March 31, 2015BRUNCH, happy hour, holidays, and February 13 - 15, 2015.
编辑:
我使用的最终解决方案是:
re.compile(r'((?:^|\.))(?![^.]*saturday)(?![^.]*sunday)(?![^.]*weekend)([^.]*)(brunch)',re.IGNORECASE)
re.sub('\g<1>\g<2>BRUNCH',str)
通过正则表达式:
DEMO
用
\1\2BRUNCH
替换匹配的字符用于
re.sub
使用替换为
\1\2BRUNCH
。参见演示。你知道吗https://regex101.com/r/eZ0yP4/16
为什么它匹配多于
brunch
因为你的正则表达式实际上比早午餐更配
See link on how the regex match
为什么不在
findall
中显示?因为您只包装了paranithesis中的
brunch
在把整个
([^.]*brunch)
包装在纸上之后re.findall
忽略那些未被捕获的相关问题 更多 >
编程相关推荐