我是一名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方式是什么?
答案 0 :(得分:2)
如果设置re.UNICODE
标志,则可以使用unicode属性,因此\w
也匹配所有脚本中的所有字母(包括û
,ñ
,{{ 1}}等。然后,á
只匹配字母,但来自任何脚本:
[^\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)
在线查看here