Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python的正则表达式:如何提取单词之间的字符串?_Python_Regex_String - Fatal编程技术网

python的正则表达式:如何提取单词之间的字符串?

python的正则表达式:如何提取单词之间的字符串?,python,regex,string,Python,Regex,String,假设我有一句话: Meet me at 201 South First St. at noon 我想得到这样的地址: South First 合适的正则表达式是什么?我目前有这个,但它不起作用: x = re.search(r"\d+\s?=([A-Z][a-z]*)\s(Rd.|Dr.|Ave.|St.)",searchstring) 其中searchstring是一个句子。地址前面总是有一个或多个数字,后面跟一个空格,后面跟的是Rd.Dr.Ave.或St.地址也总

假设我有一句话:

Meet me at 201 South First St. at noon
我想得到这样的地址:

South First
合适的正则表达式是什么?我目前有这个,但它不起作用:

 x = re.search(r"\d+\s?=([A-Z][a-z]*)\s(Rd.|Dr.|Ave.|St.)",searchstring)
其中searchstring是一个句子。地址前面总是有一个或多个数字,后面跟一个空格,后面跟的是Rd.Dr.Ave.或St.地址也总是以大写字母开头。

您可以使用

\d+\s*([A-Z].*?)\s+(?:Rd|Dr|Ave|St)\.

细节

\d+-一个或多个数字 \s*-0或更多空格 [A-Z].*捕获组1:一个大写ASCII字母,然后是除换行符以外的任何0个或更多字符,尽可能少 \s+-1+空格 ?:Rd | Dr | Ave | St-Rd、Dr、Ave或St \-一个点 见a:


输出:南方优先。

第一组,您尝试匹配地址的部分是[A-Z][A-Z]*,它表示一个大写字母后跟任何小写字母。可能您需要的是任何大小写字母或空格:[A-Za-z]*。还要注意,第二组中的点表示任何字符,而不是文字,因此必须对其进行转义。解决方案如下所示:

South First
>>>关于搜索者“\d+\s?[A-Za-z]*\s+Rd|Dr|Ave|St\”,“中午在南第一街201号见我”[1] “南方优先” 或者只是使用。接受任何东西

>>>关于搜索者“\d+\s?*?\s+Rd | Dr | Ave | St\”,“中午在南第一街201号见我”[1] “南方优先” 以下是如何:

import re
s = 'Meet me at 201 South First St. at noon'
print(re.findall('(?<=\d )[A-Z].*(?= d.|Dr.|Ave.|St.)', s)[0])

非常感谢。为什么要使用group1?@lameprogrammer01,因为您需要的值在Group 1中捕获。前后匹配的文本只是上下文,它仍然存在于m.group中。这是有道理的。如何确保地址的第一个字母是大写?@lameprogrammer01如果您不喜欢Unicode,请使用r'\d+\s*[a-Z].*?\s+?:Rd | Dr | Ave | St\。我更新了解决方案,以确保它以[A-Z]开头谢谢。我该如何在我所拥有的内容中添加空格?@lameprogrammer01我更新了我的答案,加入了你问题的答案。
'South First'