处理正则表达式中的空格

2024-06-26 13:45:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个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],但显然没那么简单。你知道吗

最简单的正则表达式方法是什么来找到合适的匹配?你知道吗


Tags: 文件字符串名称语言单词july例子regex
1条回答
网友
1楼 · 发布于 2024-06-26 13:45:35

如果设置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

相关问题 更多 >