为什么正则表达式'。+ \ s。+ \ n'不能获得预期的字符串列表?

时间:2019-07-17 09:34:10

标签: python regex

正则表达式'。+ \ s。+ \ n'与'China Beijing \ nUS Washington \ n'匹配,而未获得预期的字符串列表

使用正则表达式匹配字符串

import re
a = re.compile(r'.+\s.+\n')
str1 = 'China Beijing\nUS Washington\n'
b = a.findall(str1)
print(b)

我想输出['China Beijing\n', 'US Washington\n'],但是实际输出['China Beijing \ nUS Washington \ n'],但是,当我与'匹配时。 。 \ n',我得到了['China Beijing \ n','US Washington \ n']。为什么? 预先感谢

3 个答案:

答案 0 :(得分:0)

您可以使用非贪婪运算符:.*?

import re
a = re.compile(r'.*?\s.*?\n')
str1 = 'China Beijing\nUS Washington\n'
b = a.findall(str1)
print(b)

或者使用\w[A-z]+而不是.的更具选择性的模式

import re
a = re.compile(r'\w+\s\w+\n')
str1 = 'China Beijing\nUS Washington\n'
b = a.findall(str1)
print(b)

答案 1 :(得分:0)

您使用的正则表达式包含\s特殊序列。此序列也匹配\ n,如python的re文档中所述。 因此,它将贪婪地匹配与匹配China Beijing\nUS Washington\n

相对应的最大字符串
  

未指定UNICODE标志时,它与任何空格匹配   字符,它等效于设置[\ t \ n \ r \ f \ v]。本地   标志对空间的匹配没有额外的影响。如果设置了UNICODE,   这将匹配字符[\ t \ n \ r \ f \ v]加上任何   在Unicode字符属性数据库中分类为空格。

来源:https://docs.python.org/2/library/re.html

解决方案

使用以下正则表达式:

[A-z]+\s[A-z]+\n

答案 2 :(得分:0)

如果您也想过滤\n,请尝试此操作。

>>> s = "China Beijing\nUS Washington\n"
>>> re.findall(r'\S+\s+\S+',s)
['China Beijing', 'US Washington']