Python 如何通过正则表达式提取语言
我有以下两个字符串:Python 如何通过正则表达式提取语言,python,regex,Python,Regex,我有以下两个字符串: s1 = 'Audio: Dolby Digital 5.1 (English)' s2 = 'Audio: Stereo (English, French)' 我想找出每个字符串中的第一种语言。以下是我到目前为止的情况: re.search(r'\s\((.+)', s1) ['English)'] 我该如何改进这一点来处理上述两个问题?假设语言总是放在末尾,用括号括起来,并用,列出: (?<=\()\w+(?=(?:, \w+)*\)$) (?假设语言总是在
s1 = 'Audio: Dolby Digital 5.1 (English)'
s2 = 'Audio: Stereo (English, French)'
我想找出每个字符串中的第一种语言。以下是我到目前为止的情况:
re.search(r'\s\((.+)', s1)
['English)']
我该如何改进这一点来处理上述两个问题?假设语言总是放在末尾,用括号括起来,并用
,
列出:
(?<=\()\w+(?=(?:, \w+)*\)$)
(?假设语言总是在末尾,用括号括起来,并用,
列出:
(?<=\()\w+(?=(?:, \w+)*\)$)
(?您可以使用正则表达式的以下简单修改:
\s\(([^,\n\)]+)
您只需对正则表达式进行以下简单修改即可:
\s\(([^,\n\)]+)
您正在查找第一个LParen之后和第一个逗号之前的文本。因此,与此匹配的正则表达式是:
\(([^,]*),
(您的答案将在第1组中)
最后,我想向您指出,这将帮助您轻松地可视化您的正则表达式问题。您正在查找第一个LParen之后和第一个逗号之前的文本。因此,与此匹配的正则表达式是:
\(([^,]*),
(您的答案将在第1组中)
最后,我想向您指出,这将帮助您轻松可视化您的正则表达式问题。扩大搜索范围,以括号或逗号+空格开头短语,以括号或逗号+空格结尾:
>>> re.findall(r'\s(?:\(|, )(.+)(?:\)|, )', s2)
['English, French']
括号后的?:
表示非捕获组
然后,您可以通过索引获取您感兴趣的任何语言
由于您正在搜索的字符串实际上相当整洁,因此您也可以在不使用正则表达式的情况下执行此操作:
>>> s1.split('(')[1].split(')')[0].split(', ')[0]
'English'
>>> s2.split('(')[1].split(')')[0].split(', ')[0]
'English'
扩大搜索范围,以括号或逗号+空格开头短语,以括号或逗号+空格结尾:
>>> re.findall(r'\s(?:\(|, )(.+)(?:\)|, )', s2)
['English, French']
括号后的?:
表示非捕获组
然后,您可以通过索引获取您感兴趣的任何语言
由于您正在搜索的字符串实际上相当整洁,因此您也可以在不使用正则表达式的情况下执行此操作:
>>> s1.split('(')[1].split(')')[0].split(', ')[0]
'English'
>>> s2.split('(')[1].split(')')[0].split(', ')[0]
'English'
您可以使用它,它只会找到第一种语言,这只是对现有代码的一个小调整
f=re.findall(r'\((\w+)', s1)
e=re.findall(r'\((\w+)', s2)
if f:
print f
if e:
print e
f = ['English']
e = ['English']
如果你只想要第一种语言,那么你应该像这样使用search
f = re.search(r'\((\w+)', s1)
e = re.search(r'\((\w+)', s2)
if f:
print f.group(1)
if e:
print e.group(1)
这将打印一个字符串而不是一个列表,因为它只找到一件事您可以使用它,它只会找到第一种语言,并且它只是对现有代码的一个小调整
f=re.findall(r'\((\w+)', s1)
e=re.findall(r'\((\w+)', s2)
if f:
print f
if e:
print e
f = ['English']
e = ['English']
如果你只想要第一种语言,那么你应该像这样使用search
f = re.search(r'\((\w+)', s1)
e = re.search(r'\((\w+)', s2)
if f:
print f.group(1)
if e:
print e.group(1)
这将打印一个字符串而不是一个列表,因为它只找到了一件事我想OP只是在寻找第一种语言是的,我在发布后注意到了这一点。然后我添加了关于使用索引获取第一种语言的注释(例如,结果[0]
)。如果OP需要其他语言,可能会很有用。实际上,如果他只需要第一个结果,我不确定他为什么使用findall()
而不是search()
。可能是个错误。OP显然与regex有一些问题,因此他/她可能不知道差异。我认为OP只是在寻找第一种语言。是的,我在发布后注意到了这一点。然后我添加了关于使用索引获取第一种语言的注释(例如,结果[0]
)。如果OP需要其他语言,可能会很有用。实际上,如果他只需要第一个结果,我不确定他为什么使用findall()
而不是search()
。可能是错误。OP显然与regex有一些问题,因此他/她可能不知道difference@David542如果这对你有效,那么别忘了标记它,这样其他人就会知道什么对你有效future@David542如果这对你有效,那么别忘了标记它,这样其他人就会知道在未来什么对你有效。我可以问一下你为什么这么做吗如果你只想要第一个结果,你就用findall()
而不是search()
了吗?@TigerhawkT3好点,应该修改一下。请问你为什么要用findall()
而不是search()
而只想要第一个结果?@TigerhawkT3好点,应该修改一下。