Python 这样的正则表达式哪里错了?;
我正在使用pythonPython 这样的正则表达式哪里错了?;,python,regex,Python,Regex,我正在使用python 模式是: re.compile(r'^(.+?)-?.*?\(.+?\)') 案文如下: text1 = 'TVTP-S2(xxxx123123)' text2 = 'TVTP(xxxx123123)' 我希望得到TVTP,这个正则表达式可以: pattern = r'^([^-]+).*\(.+?\)' >>> re.findall(pattern, 'TVTP-S2(xxxx123123)') ['TVTP'] >>> re.
模式是:
re.compile(r'^(.+?)-?.*?\(.+?\)')
案文如下:
text1 = 'TVTP-S2(xxxx123123)'
text2 = 'TVTP(xxxx123123)'
我希望得到TVTP,这个正则表达式可以:
pattern = r'^([^-]+).*\(.+?\)'
>>> re.findall(pattern, 'TVTP-S2(xxxx123123)')
['TVTP']
>>> re.findall(pattern, 'TVTP(xxxx123123)')
['TVTP']
一个快速的答案是
^(\w+)(-.*?)?\((.*?)\)$
这是因为第一个加号是惰性的,后面的破折号是可选的,后面是允许任何字符的模式 这允许正则表达式引擎为第一组选择单个字母T(因为它是惰性的),选择将破折号解释为不存在,这是允许的,因为破折号后面有一个问号,然后选择下一个。*匹配“VTP-S2” 您可以只抓取非破折号来捕获,然后抓取非破折号直到括号
p=re.compile(r'^([^-]*?)[^(]*\(.+?\))
p、 搜索('TVTP-S2(XX123123)blah()')。组(1)
非参数部分阻止第二部分匹配“S2(xxxx123123)blah”(“在我上面修改的示例中)。匹配这些格式的另一个选项是:
^([^-()]+)(?:-[^()]*)?\([^()]*\)
解释
字符串的开头^
捕获组1,将([^-()]+)
-
和(
)以外的任何字符匹配1+次
由于(?:-[^()]*)?
被排除在第一部分之外,因此可以选择匹配-
,后跟-
和(
)以外的任何字符
匹配从\([^()]*\)
到(
,但不匹配它们之间的任何括号)
您希望如何获得它?您的其余代码在哪里?因为
-
是可选的,第一组将只匹配第一个字母,因为它不是贪婪的,那么*?
将匹配所有内容,直到(
。使用r'^[^(\s-]+')
import re
regex = r"^([^-()]+)(?:-[^()]*)?\([^()]*\)"
s = ("TVTP-S2(xxxx123123)\n"
"TVTP(xxxx123123)\n")
print(re.findall(regex, s, re.MULTILINE))
['TVTP', 'TVTP']