我有一组输入。我正在尝试编写一个正则表达式来匹配输入中的以下模式:
现场 时间 _
输入示例:
今天 中午 12:30 在 Sam 的客厅
文本的粗体部分在每个输入中都不同。
我写了以下正则表达式:
import regex as re
input_example = "Today at 12:30 PM on Rakesh's Echo"
regexp_1 = re.compile(r'(\w+) at (\d+):(\d+) (\w+) on (\w+)')
re_match = regexp_1.match(input_example)
哪个有效,我正在匹配正确的模式。我现在正试图从模式中提取组。
我想要的输出是:
re_match.group(1)
>> "Today"
re_match.group(2)
>> "12:30 PM"
re_match.group(3)
>> "Sam's living room"
但是,我当前的正则表达式匹配没有给我这个输出。给我上述输出的正确正则表达式是什么?
原文由 Rakesh Adhikesavan 发布,翻译遵循 CC BY-SA 4.0 许可协议
你很接近。你只是想稍微调整你的捕获组看起来像……
re.compile(r"(\w+) at (\d+:\d+ \w+) on (.+)")
请注意,第二个捕获组现在将匹配完整的
hour:minute period-of-day
。 The final capture group(\w+)
will matcha-z
,A-Z
,0-9
and_
, but not'
导致您只能捕获一小部分描述。更改为.+
允许它匹配任何字符。如果您只知道\w
之外的几个字符需要匹配,您可以执行[\w']+
以及您需要的任何其他字符。使用和测试正则表达式的好工具是 https://regex101.com/ 只需确保选择 python 语言即可。