2 回答
TA贡献1825条经验 获得超4个赞
要在第一次出现空白字符之前提取任何内容,然后是圆括号(,您可以使用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 re
strs = ['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))
添加回答
举报
