在使用正则表达式的Python中,空格后跟括号(非惰性)
我试图做以下工作:从字符串列表中提取第一次出现(可能不止一次)前的任何内容,空格后跟一个圆括号“(” 我尝试了以下方法:在使用正则表达式的Python中,空格后跟括号(非惰性),python,regex,regex-greedy,re,Python,Regex,Regex Greedy,Re,我试图做以下工作:从字符串列表中提取第一次出现(可能不止一次)前的任何内容,空格后跟一个圆括号“(” 我尝试了以下方法: re.findall("(.*)\s\(", line)) 但它给出了以下字符串的写入结果: 卡罗尔顿(西乔治亚大学)[2]*Dahlonega(北乔治亚学院和州立大学)[2] 提前感谢您可以使用lookahead进行此操作。请尝试此正则表达式: [a-z A-Z]+(?=[ ]+[\(]+) 要在第一次出现空格字符后加圆括号之前提取任何内容(您可以使用re.search
re.findall("(.*)\s\(", line))
但它给出了以下字符串的写入结果:
卡罗尔顿(西乔治亚大学)[2]*Dahlonega(北乔治亚学院和州立大学)[2]
提前感谢您可以使用lookahead进行此操作。请尝试此正则表达式:
[a-z A-Z]+(?=[ ]+[\(]+)
要在第一次出现空格字符后加圆括号之前提取任何内容
(
您可以使用re.search
(此方法仅用于提取第一个匹配项):
请参见和。注意,第二种方法虽然较长,但效率更高,因为它遵循
详细信息
-字符串的开头^
-第1组:任何0+字符尽可能少(.*?)
-一个空格和\s\(
字符)(
-字符串开头,然后是0+非空白字符^\S*
-0次或多次出现(?:\s(?!\()\s*)*
-一个空格字符,后面不跟\s(?!\()
(
-0+非空白字符\S*
建议您使用:
r'(\S+)\S+\(
对于以下字符串,您希望得到什么,它还输出了什么?谢谢,我不确定您的建议中的“r”是什么。如果我尝试使用此“.re.findall”((\S+)\S+(“,line)”,我会遇到与您相同的问题before@Austin,谢谢。实际输出为:“CarrolltonGeorgia)[2]*Dahlonega”。预期的输出是“Carrolton”。谢谢,问题是我得到的“Vista”是“Isla Vista(加州大学圣巴巴拉分校)[2]”的输出。我正在尝试得到“Isla Vista”。Wiktor,非常感谢,这是非常有用的,也是一个很好的答案。
re.search(r'^(.*?)\s\(', text, re.S).group(1)
re.search(r'^\S*(?:\s(?!\()\S*)*', text).group()
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))