正则表达式'。+ \ 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']。为什么?
预先感谢
答案 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']