[英]Negative RegEx pattern matching in Python equivalent to Perl(!~ operator)
有沒有辦法完全反向匹配我使用的正則表達式。
(?!...)
僅適用於簡單模式。 我的意思是我有一個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)
OUTPUT
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點到下午12點之外,有沒有辦法可以刪除任何單詞...
也就是說,我想要的是這個輸出: 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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.