2017-02-07 81 views
1

我想在python中搜索一个字符串使用正则表达式为一个特定的单词,以一个空格开头,并以空格后面结束。我想要搜索的字符串是;搜索正则表达式,返回字符串与空格

JAKARTA, INDONESIA (1 February 2017) 

,我想找回", INDONESIA ("一部分,所以我可以申请rtrimltrim它。因为我也可以回到英国。

我试图在我的python代码中编写这段代码;

import re 
text = "JAKARTA, INDONESIA (1 February 2017)" 
countryRegex = re.compile(r'^(,)(\s)([a-zA-Z]+)(\s)(\()$') 
mo = countryRegex.search(text) 
print(mo.group()) 

但是这样就会打印出结果

AttributeError: 'NoneType' object has no attribute 'group' 

向我表示,我不返回任何匹配的对象。

然后我试图在regex 101中使用我的正则表达式,但它仍然在这里返回一个错误,表示“您的正则表达式与主题字符串不匹配”。

我以为我测试文字逗号(,),那么空间(\s),那么一个或多个字母([a-zA-Z]+),然后另一个空间(\s),然后终于开口托架确保我有这会工作逃脱它(\()。我的正则表达式有什么问题吗?

+1

的'^'和'$'锚必须拆除。 –

+0

还有'^'锚。 – Toto

+0

@WiktorStribiżew这工作。有可能解释为什么请呢? – mp252

回答

1

删除锚点后(^匹配字符串位置的开始,$匹配字符串位置的结尾),正则表达式将匹配字符串。但是,你可能会得到INDONESIA使用捕获组:

,\s*([a-zA-Z]+)\s*\(

regex demomatch.group(1)将包含该值。

详细

  • ,\s* - 逗号和零个或多个空格(替换*+如果想至少1个空白为存在)
  • ([a-zA-Z]+) - 捕获组1匹配的一个或更多ASCII字母
  • \s* - 零个或多个空格
  • \( - a (文字符号。

Sample Python code

import re 
text = "JAKARTA, INDONESIA (1 February 2017)" 
countryRegex = re.compile(r',\s*([a-zA-Z]+)\s*\(') 
mo = countryRegex.search(text) 
if mo: 
    print(mo.group(1)) 

另一种正则表达式将捕捉, +空格和空格之间的任何+ (

,\s*([^)]+?)\s*\(

this regex demo。在这里,[^)]+?匹配1+字符以外的)尽可能少。

2

你可以尝试使用这个正则表达式来代替Lookbehead和lookahead,所以它只能匹配状态部分。
在列表中添加空格可以帮助您匹配英国等州。

(?<=,)([a-zA-Z ]+)(?= \() 

Test on Regex101

+0

你可以将搜索结果与捕获混合在一起,那么为什么还要使用lookarounds呢? –

+0

我使用Lookaround,因为我认为它比捕获比需要更多的文本要好。如果您更喜欢使用组而不是匹配,则会添加捕获组。 –