我是 RegEx 新手,在过去的 48 小时里,这让我抓狂。在阅读数百个示例和文档时,我尽我所能。我想学习。
我需要从这样的字符串中提取月份名称,月份是中间的单词(多语言):
10 july 2014
9 dicembre2014
1januar2011
18août2002 (note: non-[A-z] character in the month if it matters)
我得到的最接近的是 [\D]{3,}(?=.{4,}) 产生:
' july '
' dicembre'
'januar'
'août'
但它仍然匹配名称周围的空格。我尝试添加 [^\s] 但显然没那么简单。
找到正确匹配项的最简单的 RegEx 方法是什么?
请您参考如下方法:
如果你设置了 re.UNICODE 标志,你可以使用 unicode 属性,因此 \w 也匹配来自所有脚本的所有字母(包括 û、ñ、á 等)。然后,[^\W\d_] 将只匹配字母,但来自任何脚本:
\w匹配单词字符(字母、数字或下划线“_”)\W为取反简写,匹配非单词字符(同[^\w])\d匹配数字- 所以
[^\W\d_]将匹配除非单词字符、数字或“_”之外的任何内容...这意味着它只会匹配字母
代码:
#python 3.4.3
import re
str = u"10 july 2014 \n 9 dicembre2014 \n 1januar2011\n 18août2002"
pattern = r'([0-3]?\d)\s*([^\W\d_]{3,})\s*((?:\d{2}){1,2})'
result = re.findall(pattern, str, re.UNICODE)
for date in result :
print(date)
输出:
('10', 'july', '2014')
('9', 'dicembre', '2014')
('1', 'januar', '2011')
('18', 'août', '2002')
在线查询here
