Python中的可选字符串匹配

时间:2017-11-10 07:00:52

标签: python regex nlp

我想在这里选择最后一个字符串,以下是我的原始代码:

[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{2,4}

以下是我尝试的代码(获取无效的Parantheses错误):

[0-9]{1,2}\.[0-9]{1,2}\(?:.[0-9]{2,4})?

现行守则正在捕捉言语:

12.2.17
3.04.2018

我还希望它通过使最后一部分可选来捕获以下内容:

12.2
13.03

3 个答案:

答案 0 :(得分:3)

您似乎意外地转义了(字符而不是创建非捕获组。这是新的正则表达式:

[0-9]{1,2}\.[0-9]{1,2}(?:.[0-9]{2,4})?

答案 1 :(得分:0)

您还可以更紧凑的方式编写正则表达式:

\d{1,2}\.\d{1,2}(\.\d{2,4})?

答案 2 :(得分:0)

至于你的错误:

[0-9]{1,2}\.[0-9]{1,2}\(?:.[0-9]{2,4})?
#                   --^--  no backslash here!

或者,您可以使用

\d+\.\d+(?:\.\d+)?

a demo on regex101.com

<小时/> 在Python

import re

string = """
12.2.17
3.04.2018

I further want it to capture the following by making the last part optional:

12.2
13.03"""

rx = re.compile(r'(\d+\.\d+(?:\.\d+)?)')

print(rx.findall(string))
# ['12.2.17', '3.04.2018', '12.2', '13.03']
相关问题