以下字符串的正则表达式模式是什么:
hi firstName lastName 27 Jun 2017
字符串中应标识3个字段:优先级,名称和日期。到目前为止,我有以下正则表达式:
^(\w+)\s+(.*?)\s+
它标识优先级,但不标识全名。我的正则表达式标识 firstName ,不包括 lastName 。
提前致谢!
答案 0 :(得分:3)
您的正则表达式不会提取全名,因为\s+(.*?)\s+
部分匹配1个或更多空格,然后匹配并捕获除了换行符之外的任何0 +字符,尽可能少到前1个空格。这些空格是在firstName
之后找到的,因为没有更多的必要原子可以匹配。
您可以使用
^(?P<priority>\w+)\s+(?P<name>.*?)\s+(?P<date>\d.*)
请参阅regex demo
<强>详情
^
- 字符串的开头(如果使用re.match
则隐式)(?P<priority>\w+)
- 群组“优先级”:1 + word chars \s+
- 一个或多个空格(?P<name>.*?)
- 组“名称”:除了换行符之外的任何0 +字符尽可能少\s+
- 一个或多个空格(?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
答案 1 :(得分:0)
您可以使用re.findall()
:
import re
s = "hello John Someone 27 June 2017"
name = re.findall("\w+[a-zA-Z]+", s)[1:-1]
priority = re.findall("^\w+", s)[0]
date = re.findall("\d+\s\w+\s\d+", s)[0]
print(name)
print(priority)
print(date)
输出:
['John', 'Someone']
'hello'
'27 June 2017'