使用正则表达式的 Python 中的空格后跟括号(非惰性)

我正在尝试执行以下操作:从字符串列表中提取第一次出现(可能不止一个)空格之前的任何内容,然后是圆括号“(”。

我尝试了以下方法:

re.findall("(.*)\s\(", line))

但它给出了例如以下字符串的扭曲结果:

Carrollton(西乔治亚大学)[2]*Dahlonega(北乔治亚学院和州立大学)[2]

提前致谢


慕田峪7331174
浏览 100回答 2
2回答

凤凰求蛊

要在第一次出现空白字符之前提取任何内容,然后是圆括号(,您可以使用re.search(此方法仅用于提取第一个匹配项):re.search(r'^(.*?)\s\(', text, re.S).group(1) re.search(r'^\S*(?:\s(?!\()\S*)*', text).group()请参阅regex #1 demo和regex #2 demos。请注意,第二个虽然更长,但效率更高,因为它遵循展开循环原则。细节^- 字符串的开始(.*?)- 第 1 组:尽可能少的任何 0+ 个字符,\s\(- 一个空格和(字符。或更好:^\S*- 字符串开头,然后是 0+ 个非空白字符(?:\s(?!\()\S*)*- 0 次或多次出现\s(?!\()- 后面没有跟的空白字符(\S*- 0+ 非空白字符请参阅Python 演示:import restrs = ['Isla Vista (University of California, Santa Barbara)[2]','Carrollton (University of West Georgia)[2]','Dahlonega (North Georgia College & State University)[2]']rx = re.compile(r'^\S*(?:\s(?!\()\S*)*', re.S)for s in strs:    m = rx.search(s)     if m:        print('{} => {}'.format(s, m.group()))    else:        print("{}: No match!".format(s))

子衿沉夜

您可以为此使用前瞻。试试这个正则表达式:[a-z A-Z]+(?=[ ]+[\(]+)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python