簡體   English   中英

僅提取括號內的特定單詞

[英]Extract only specific words inside parenthesis

我只想提取括號內的特定單詞。 例如,如果我有一個單詞列表 ['foo', 'bar'] 和一個字符串“alpha bravo (charlie foo bar delta) foxtrot”,我想通過提取得到“alpha bravo foo bar foxtrot”。 我已經嘗試過但失敗了。

word_list = ['foo', 'bar']
string = 'alpha bravo (charlie foo bar delta) foxtrot'
print(re.sub(r"\([^()]*\b({})\b[^()]*\)".format('|'.join(word_list)), r'\1', string, flags = re.I))

我希望得到“alpha bravo foo bar foxtrot”,但結果是“alpha bravo bar foxtrot”。 你想告訴我如何解決這個問題嗎?

這是一個使用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+

這將首先嘗試匹配括號中的任何術語。 如果找到這樣的匹配,它會將整個匹配傳遞給回調 function repl() 此回調 function 將在您的單詞列表中使用re.findall以僅保留括號中您想要的匹配項。 否則,上面的正則表達式一次只能找到一個單詞。

這是我的自制食譜

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))          

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM