3

私が使用する正規表現の完全な逆一致を行う方法はありますか。

(?!...)単純なパターンでのみ機能します。つまり、複数の形式に一致する正規表現がありますが、複数の形式を除く文字列内のすべてを置き換えたいと考えていました。

たとえば、曜日、時間、月、年を見つける複雑な 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"です。

このパターンも含めるように正規表現を変更できます

しかし、このようにする代わりに、Monday/Tuesday/.... & Mon/Tue/Wed... & 11:00am/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

4

1 に答える 1