Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用正则表达式的Python中,空格后跟括号(非惰性)_Python_Regex_Regex Greedy_Re - Fatal编程技术网

在使用正则表达式的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\(
    -一个空格和
    字符)
或者更好:

  • ^\S*
    -字符串开头,然后是0+非空白字符
  • (?:\s(?!\()\s*)*
    -0次或多次出现
    • \s(?!\()
      -一个空格字符,后面不跟
    • \S*
      -0+非空白字符
见:


建议您使用:
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))