Skip to main content
 首页 » 编程设计

python之处理正则表达式中的空格

2024年10月24日31Free-Thinker

我是 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