如何在python中定义正确的pattern/expression?

How to define the correct pattern/expression in python?

你好,我想在“2017 年 9 月 10 日”之后添加一个拆分,如下所示:“2017 年 9 月 10 日 Kochkurs im Hiltl”。我将 2017 年 9 月 10 日的模式定义如下: pattern = r"\W+\s+\d+\,\s+\d+\s+" 但是,这是错误的。你知道为什么吗?谢谢:)

此模式的唯一问题是 \W 匹配字母、数字或下划线以外的任何内容(例如匹配非单词)。您可以将其替换为 \w,匹配单词字符:

import re

pattern = re.compile(r"\W+\s+\d+\,\s+\d+\s+")
print(pattern.search("September 10, 2017 Kochkurs im Hiltl"))
# Output: None

pattern = re.compile(r"\w+\s+\d+\,\s+\d+\s+")
print(pattern.search("September 10, 2017 Kochkurs im Hiltl"))
# Output: <re.Match object; span=(0, 19), match='September 10, 2017 '>

问题是因为使用了\W

以下工作如您所愿:

s = "September 10, 2017 Kochkurs im Hiltl"
date_str = list(filter(bool, re.split("^(\S+\s+\d+\,\s+\d+)", s)))[0]
print(date_str)