以下字符串的正则表达式模式是什么:
hi firstName lastName 27 Jun 2017
字符串中应标识 3 个字段:优先级、名称和日期。到目前为止,我有以下正则表达式:
^(\w+)\s+(.*?)\s+
它标识优先级,但不标识全名。我的正则表达式最多可识别 firstName,不包括 lastName。
提前致谢!
最佳答案
您的正则表达式不会提取全名,因为 \s+(.*?)\s+
部分匹配 1 个或多个空格,然后匹配并捕获除换行符之外的任何 0 个以上字符,尽可能少地直到前 1 个以上空格。这些空格位于firstName
之后。 ,因为没有更多必须匹配的原子。
您可以使用
^(?P<priority>\w+)\s+(?P<name>.*?)\s+(?P<date>\d.*)
请参阅regex demo
详细信息
-
^
- 字符串开头(如果使用re.match
则隐式) -
(?P<priority>\w+)
- 组“优先级”:1+ 个单词字符 -
\s+
- 1 个或多个空格 -
(?P<name>.*?)
- 组“名称”:除换行符之外的任何 0+ 个字符尽可能少 -
\s+
- 1 个或多个空格 -
(?P<date>\d.*)
- “日期”组:一个数字,然后是该行的其余部分。
import re
rx = r"(?P<priority>\w+)\s+(?P<name>.*?)\s+(?P<date>\d.*)"
s = "hi firstName lastName 27 Jun 2017"
m = re.match(rx, s)
if m:
print(m.group("priority")) # => hi
print(m.group("name")) # => firstName lastName
print(m.group("date")) # => 27 Jun 2017
关于python - 以下字符串的正则表达式模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45805363/