Python中的负RegEx模式匹配等效于Perl(!〜运算符)

加菲猫

有什么办法可以对我使用的正则表达式进行完全反向匹配。

(?!...)仅适用于简单模式。我的意思是我有一个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)

输出

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:00 am/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

比雷

我不明白您打算进行反向正则表达式的意图。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'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python列表的+ =运算符是否等效于append()或extend()?

来自分类Dev

Python等效于C#6中引入的空条件运算符

来自分类Dev

numpy数组等效于+ =运算符

来自分类Dev

Java中等效于Python运算符模块的基本方法参考

来自分类Dev

Java等效于C ++复制赋值运算符

来自分类Dev

Scala等效于Java 8 ::(双冒号)运算符

来自分类Dev

对象属性的传播运算符(...)等效于什么?

来自分类Dev

Java等效于C ++运算符重载

来自分类Dev

在Java中等效于::运算符的是什么?

来自分类Dev

python的正/负运算符±

来自分类Dev

模式匹配中F#小于运算符

来自分类Dev

在xtended模式匹配运算符中包含路径部分

来自分类Dev

MS Access中的模式匹配:是否有“或”运算符?

来自分类Dev

C#(.NET 2.0)中的Python'in'运算符等效

来自分类Dev

Scala模式匹配:+ +:运算符

来自分类Dev

ElasticSearch:ElasticSearch中的IN等效运算符

来自分类Dev

模式匹配重叠-运算符上的模式匹配

来自分类Dev

负(反)运算符与NOT(...)

来自分类Dev

关于ImageHash库中的减号负运算符的困惑

来自分类Dev

MVC URL模式中的OR运算符

来自分类Dev

python中的运算符

来自分类Dev

C# 中的 Perl =~ 运算符?

来自分类Dev

运算符 // 在 perl 中做什么?

来自分类Dev

与elasticsearch中的IN运算符完全匹配

来自分类Dev

Spring Data JPA / OpenJPA:是否有等效于SQL!=-运算符

来自分类Dev

如何在Haskell中为中缀/运算符进行模式匹配?

来自分类Dev

回复:在 Perl 的匹配运算符中插入变量时,如何转义元字符?

来自分类Dev

RegEx语法中的“ OR”运算符

来自分类Dev

使用三元if运算符进行模式匹配

Related 相关文章

热门标签

归档