我有一个字符串列表,每个字符串都有以下模式(一组单词,后跟括号,用逗号分隔的单词):
$brand
我想要的输出是:
"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 ']
但是我想知道是否有一种方法可以组合模式以一次全部获得所需的输出。
答案 0 :(得分:3)
如果这些值不仅是字母数字,并且可能包含任何字符,但空格和逗号,则建议使用基于否定字符类的“通用”正则表达式:
re.findall(r'[^(),\s](?:[^(),]*[^(),\s])?', s)
请参见regex demo。
strip()
返回所有匹配项后,无需re.findall
个项目。
详细信息
[^(),\s]
-一个negated character class匹配除(
,)
,,
和空格之外的任何字符(?:[^(),]*[^(),\s])?
-1次或0次出现:
[^(),]*
-除(
,)
和,
之外的任何字符[^(),\s]
-除(
,)
,,
和空格之外的任何字符答案 1 :(得分:1)
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
对其进行测试([a-zA-Z]{1,2}\s){3}|[A-Z]
答案 2 :(得分:1)
您可以使用re.findall
:
s = "vw xy zz (X, Y, Z)"
result = [i.strip() for i in re.findall('[\w\s]+', s)]
输出:
['vw xy zz', 'X', 'Y', 'Z']