Python 当存在可选的子字符串分隔符时,提取括号内的组

Python 当存在可选的子字符串分隔符时,提取括号内的组,python,regex,string,unicode,delimiter,Python,Regex,String,Unicode,Delimiter,给定两个字符串: l = ['作主 (zuòzhǔ)', '座右铭 (座右銘, zuòyòumíng)'] 所需输出为: ('作主', None, 'zuòzhǔ') ('作主', '座右銘', 'zuòyòumíng') 我试着提取组,但我无法拆分座右銘, 'zuòyòumíng分为两组: l = ['作主 (zuòzhǔ)', '座右铭 (座右銘, zuòyòumíng)'] word = re.search(r'(.*)\s\((.*?)\)', l[0]) sim = word.g

给定两个字符串:

l = ['作主 (zuòzhǔ)', '座右铭 (座右銘, zuòyòumíng)']
所需输出为:

('作主', None, 'zuòzhǔ')
('作主', '座右銘', 'zuòyòumíng')
我试着提取组,但我无法拆分
座右銘, 'zuòyòumíng
分为两组:

l = ['作主 (zuòzhǔ)', '座右铭 (座右銘, zuòyòumíng)']
word = re.search(r'(.*)\s\((.*?)\)', l[0])

sim = word.group(1)
try:
    pinyin = word.group(3)
    trad = word.group(2)
except:
    pinyin = word.group(2)
    trad = None

print (sim, trad, pinyin)
我可以这样做:

try:
    pinyin = word.group(3)
    trad = word.group(2)
except:
    trad, pinyin = word.group(2).split(', ')
但是可以在正则表达式中进行逗号拆分吗?

我也尝试过,但它仍然捕获了
*?
中的整个字符串:

(.*)\s\((.*?[,][\s].*?)\)

您可以使用以下正则表达式:

(.*?) \((?:(.*?), )?(.*?)\)
唯一的区别是可选的非捕获组包含逗号前面的部分:
(?:(.*)?

In [4]: re.search(r'(.*?) \((?:(.*?), )?(.*?)\)', '座右铭 (座右銘, zuòyòumíng)').groups()
Out[4]: ('座右铭', '座右銘', 'zuòyòumíng')

In [5]: re.search(r'(.*?) \((?:(.*?), )?(.*?)\)', '作主 (zuòzhǔ)').groups()
Out[5]: ('作主', None, 'zuòzhǔ')

您可以使用以下正则表达式:

(.*?) \((?:(.*?), )?(.*?)\)
唯一的区别是可选的非捕获组包含逗号前面的部分:
(?:(.*)?

In [4]: re.search(r'(.*?) \((?:(.*?), )?(.*?)\)', '座右铭 (座右銘, zuòyòumíng)').groups()
Out[4]: ('座右铭', '座右銘', 'zuòyòumíng')

In [5]: re.search(r'(.*?) \((?:(.*?), )?(.*?)\)', '作主 (zuòzhǔ)').groups()
Out[5]: ('作主', None, 'zuòzhǔ')