仅提取括号内的特定单词
Extract only specific words inside parenthesis
我只想提取括号内的特定单词。例如,如果我有一个单词列表 ['foo'、'bar'] 和一个字符串“alpha bravo (charlie foo bar delta) foxtrot”,我想通过萃取。
我已经尝试过但失败了。
word_list = ['foo', 'bar']
string = 'alpha bravo (charlie foo bar delta) foxtrot'
print(re.sub(r"\([^()]*\b({})\b[^()]*\)".format('|'.join(word_list)), r'', string, flags = re.I))
我希望得到“alpha bravo foo bar foxtrot”,但结果是“alpha bravo bar foxtrot”。
你想告诉我如何解决这个问题吗?
这是我的自制食谱
import re
word_list = ['foo', 'bar']
string = 'alpha bravo (charlie foo bar delta) foxtrot'
string = re.split('\(|\)',string)
text = [string[0],string[2]]
count = 0
for elements in string[1].split():
if elements in word_list:
count += 1
text.insert(count,elements+' ')
print(''.join(text))
这是一个基于正则表达式的方法,使用 re.sub
和回调逻辑:
word_list = ['foo', 'bar']
regex = r'\b(?:' + '|'.join(word_list) + r')\b' # \b(?:foo|bar)\b
string = 'alpha bravo (charlie foo bar delta) foxtrot'
def repl(m):
if m.group(1):
return ' '.join(re.findall(regex, m.group(1)))
else:
return m.group(0)
print(re.sub(r'\((.*?)\)|\w+', repl, string))
这会打印:
alpha bravo foo bar foxtrot
为了便于解释,我们对以下模式进行全局正则表达式搜索:
\((.*?)\)|\w+
这将首先尝试匹配括号中的任何字词。如果找到这样的匹配项,它将把整个匹配项传递给回调函数 repl()
。此回调函数将在您的单词列表中使用 re.findall
以仅保留您想要的括号中的匹配项。否则,上面的正则表达式一次只能找到一个单词。
我只想提取括号内的特定单词。例如,如果我有一个单词列表 ['foo'、'bar'] 和一个字符串“alpha bravo (charlie foo bar delta) foxtrot”,我想通过萃取。 我已经尝试过但失败了。
word_list = ['foo', 'bar']
string = 'alpha bravo (charlie foo bar delta) foxtrot'
print(re.sub(r"\([^()]*\b({})\b[^()]*\)".format('|'.join(word_list)), r'', string, flags = re.I))
我希望得到“alpha bravo foo bar foxtrot”,但结果是“alpha bravo bar foxtrot”。 你想告诉我如何解决这个问题吗?
这是我的自制食谱
import re
word_list = ['foo', 'bar']
string = 'alpha bravo (charlie foo bar delta) foxtrot'
string = re.split('\(|\)',string)
text = [string[0],string[2]]
count = 0
for elements in string[1].split():
if elements in word_list:
count += 1
text.insert(count,elements+' ')
print(''.join(text))
这是一个基于正则表达式的方法,使用 re.sub
和回调逻辑:
word_list = ['foo', 'bar']
regex = r'\b(?:' + '|'.join(word_list) + r')\b' # \b(?:foo|bar)\b
string = 'alpha bravo (charlie foo bar delta) foxtrot'
def repl(m):
if m.group(1):
return ' '.join(re.findall(regex, m.group(1)))
else:
return m.group(0)
print(re.sub(r'\((.*?)\)|\w+', repl, string))
这会打印:
alpha bravo foo bar foxtrot
为了便于解释,我们对以下模式进行全局正则表达式搜索:
\((.*?)\)|\w+
这将首先尝试匹配括号中的任何字词。如果找到这样的匹配项,它将把整个匹配项传递给回调函数 repl()
。此回调函数将在您的单词列表中使用 re.findall
以仅保留您想要的括号中的匹配项。否则,上面的正则表达式一次只能找到一个单词。