我有一个字符串列表,每个字符串都有以下模式(一组单词,后跟括逗号分隔单词的括号):
"vw xy zz (X, Y, Z)"
我想要的输出是:
["vw xy zz", "X", "Y", "Z"]
我知道如何在括号前提取文本:
import re
pattern = r"(^[^\(]+)"
text = "vw xy zz (X, Y, Z)"
re.findall(pattern, text)
# ['vw xy zz ']
我还知道如何提取括号之间的文本:
pattern = r"\(.*\)"
text = "vw xy zz (X, Y, Z)"
re.findall(pattern, text)
# ['(X, Y, Z)']
但我想知道是否有一种方法可以将这些模式组合起来,一次获得所需的输出。你知道吗
如果这些值不仅是字母数字,而且可能包含除空格和逗号以外的任何字符,我建议使用基于否定字符类的“generic”regex:
参见regex demo。你知道吗
不需要
strip()
返回所有匹配项的re.findall
之后的项。你知道吗细节
[^(),\s]
-a negated character class匹配除(
、)
、,
和空白之外的任何字符(?:[^(),]*[^(),\s])?
-1或0次出现:[^(),]*
-除(
、)
和,
以外的任何字符[^(),\s]
-除了(
、)
、,
和空格之外的任何字符const regex = /([a-zA-Z]{1,2}\s?){3}|[A-Z]/g const text = "vw xy zz (X, Y, Z)" const res = text.match(regex); console.log(res)
;此正则表达式将匹配:
["vw xy zz ", "X", "Y", "Z"]
你可以在这里测试regex tester
您可以使用
re.findall
:输出:
相关问题 更多 >
编程相关推荐