Чтобы извлечь что-либо до первого появления символа пробела, за которым следует круглая скобка (
, вы можете использовать re.search
(этот метод предназначен только для извлечения первого совпадения):
re.search(r'^(.*?)\s\(', text, re.S).group(1)
re.search(r'^\S*(?:\s(?!\()\S*)*', text).group()
См. Демонстрационные примеры regex # 1 и regex # 2 . Обратите внимание, что второй, хотя и более длинный, гораздо эффективнее, поскольку он следует принципу unroll-the-l oop .
Подробности
^
- начало строки (.*?)
- Группа 1: любые 0+ символов, как можно меньше , \s\(
- пробел и (
char.
Или, лучше:
^\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))