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))
添加回答
舉報
