如何在正则表达式中匹配“或”内部?

萨姆·金

我有两种文档要解析:

1545994641 INFO: ...

'{"deliveryDate":"1545994641","error"..."}'

我想1545994641从它们每个中提取时间戳

因此,我决定编写一个正则表达式来匹配两种情况:

(\d{10}\s|\"\d{10}\")

在第一种文档中,它使用(\d{10}\s上方“或”中的第一个表达式匹配时间戳并将其分组

>>> regex = re.compile("(\d{10}\s|\"\d{10}\")")
>>> msg="1545994641 INFO: ..."
>>> regex.search(msg).group(0)
'1545994641 '

(到现在为止还挺好。)

但是,在第二种类型中,使用“或”(\"\d{10}\")中的第二个表达式将时间戳和引号进行匹配,将它们分组。但是我只想要时间戳,而不是""

>>> regex = re.compile("(\d{10}\s|\"\d{10}\")")
>>> msg='{"deliveryDate":"1545994641","error"..."}'
>>> regex.search(msg).group(0)
'"1545994641"'

我试过的

我决定对引号使用非捕获组:

(\d{10}\s|(?:\")\d{10}(?:\"))

但由于外部团体抓住了他们而没有用。

我也删除了外部组,但是结果是一样的。

不需要的解决方法:

  • 我可以通过为or中的每个表达式创建一个组来超出此范围,但是我只希望它输出一个组(从正则表达式中提取代码)。
  • 我还可以使用regex的第二步来从带有引号的组中捕获时间戳,但这又会破坏代码抽象。
  • 我可以""在正则表达式中省略,但是它将与消息中间的时间戳匹配,因为我希望客观地将时间戳捕获为键的值或文档的开头,后跟一个空格。

有没有办法我可以同时匹配以上两种情况,但是如果它与第二种情况匹配,则仅返回时间戳?还是不可能?

编辑: @Amit Bhardwaj注意到,第一种情况在时间戳记之后也返回一个空格。相同的解决方案可能是另一个问题(我没有弄清楚)!

维克多·史翠比维

如果您的代码只能访问整个匹配项,则可以使用环视方法:

^\d{10}(?=\s)|(?<=")\d{10}(?=")

请参阅regex演示

在Python中,将其声明为

rx = r'^\d{10}(?=\s)|(?<=")\d{10}(?=")'

图案细节

  • ^\d{10}(?=\s)
    • ^ -字符串开始
    • \d{10} -十位数
    • (?=\s) -正向超前查询,需要在当前位置的右侧紧跟一个空白字符
  • | - 要么
  • (?<=")\d{10}(?=")
    • (?<=")-一个"字符
    • \d{10} -十位数
    • (?=") -正向前瞻,需要在当前位置的右边立即加上双引号。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Javascript中匹配正则表达式

如何在Smalltalk正则表达式中匹配[

如何在python中匹配正则表达式?

如何在正则表达式中匹配“ [”和“]”?

如何在匹配表达式中编写正则表达式文字?

如何在Swift中逆正则表达式匹配[正则表达式否定]?

如何在正则表达式匹配中排除“ <”

如何在单行上匹配正则表达式?

如何从正则表达式匹配中获取范围

如何匹配正则表达式中的“任何字符”?

正则表达式,如何排除匹配中的搜索

如何匹配正则表达式中的单词

如何匹配正则表达式

如何在PHP中以这种模式匹配日期或正则表达式中的特定作品

如何在tcl中的正则表达式中匹配[]

如何在scala中的foreach函数中的正则表达式上进行模式匹配?

如何在bigquery中的字符串中获取正则表达式的匹配计数?

如何在PostgreSQL中的字符串中获取正则表达式匹配的位置?

如何在正则表达式或操作中获取内部组

如何在正则表达式中创建匹配项?

如何在正则表达式中匹配字符串后跟重复模式?

如何在我的场景中获得正则表达式匹配

如何在golang正则表达式中匹配字符或字符串结尾?

如何在尝试与python中的正则表达式匹配时应付变音符号

如何在Node / V8中实现正则表达式匹配?

如何在PHP正则表达式中获得3个都匹配的条件?

如何在正则表达式中匹配来自 Contenteditable Div 的冗余行

如何在C ++正则表达式中匹配换行符?

如何在正则表达式中匹配特定于语言的字符?