gpt4 book ai didi

python - Python 中的负 RegEx 模式匹配等同于 Perl(!~ operator)

转载 作者:行者123 更新时间:2023-11-28 19:23:33 28 4
gpt4 key购买 nike

有没有办法完全反向匹配我使用的正则表达式。

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

举个例子:我写了一个复杂的 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)

输出

Monday: 11:30am - 9:30pm  Thursday: 11:30am - 10:00pm  Friday: 11:30am - 10:30pm  Sunday: 10:30am - 9:30pm

但我在这里缺少 “周一:上午 11:30 - 晚上 9:30 周二:上午 11:30 - 晚上 9:30 周三:上午 11:30 - 晚上 10:00 周四:周五上午 11:30 - 晚上 10:00:上午 11:30 - 晚上 10:30”

我也可以修改我的正则表达式以包含此模式

但是除了这样做之外,有没有一种方法可以删除除 Monday/Tuesday/.... & Mon/Tue/Wed... & 11:00am/12pm... 之外的任何单词

即,我想要的正是这个输出:周一:上午 11:30 - 晚上 9:30 周二:上午 11:30 - 晚上 9:30 周三:
上午 11:30 - 晚上 10:00 周四:上午 11:30 - 晚上 10:00 周五:上午 11:30 - 晚上 10:30
周六:上午 11:00 - 晚上 10:30 周日:上午 10:30 - 晚上 9:30

最佳答案

我不明白你做反向正则表达式的意图。 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'

关于python - Python 中的负 RegEx 模式匹配等同于 Perl(!~ operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18787279/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com