我想在这里选择最后一个字符串,以下是我的原始代码:
[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
答案 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+)?
<小时/>
在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']