您好,我正在用 Python 中的正则表达式函数进行练习,但我遇到了一个问题。有没有办法引用字符串的选定部分?为了更清晰,我想将组合的主题标签拆分为主要单词。为此,我使用了一个名为“wordninja”的库。所以我将解码格式更改为 wordninja.py 文件以使其理解 latin-1 并更改了最后一个字符串以使其拆分单词,如果我尝试拆分组成的主题标签,它会给我回到主要单词,为了做到这一点,我以 .txt 格式编写了意大利语词汇表。为此,我正在这样做:
import wordninja
dic = wordninja.LanguageModel('words_italian_covid.txt.gz')
dic.split('carnesintetica')
>>>['carne', 'sintetica']
所以大的想法是用空格连接这个拆分句子:
" ".join(dic.split('carnesintetica'))
>>> carne sintetica
为此,我只想替换选定字符串的一部分,对其进行此操作。因此,“carnesintetica”一词将成为 re.sub 选择中的选定部分,标记为 (\w)。我举个例子:
text1 = '#Coronavirus: ripartiamo dalla Terra.Cosa mangeremo domani? #Food3D, #insetti e #carnesintetica?'
我希望 dic.split() 仅在选定的主题标签上运行,这意味着在“#Coronavirus”、“#Food3D”、“#insetti”和“#carnesintetica”上运行,以获得“”, 《<食物 3D>》、《》、《》。 我是这样处理的:
import re
text1 = re.sub(r'#(\w+)',r'< \1 >', text1)
然后在这个字符串上我有段问题:我会用 dic.split(\1) 操作,所以只在选定的单词上,也就是说\1:
text1 = re.sub(r'< (\w+) >', ' '.join(dic.split(\w+)), textx1)
这里是问题所在:我想知道如何在 dic.split 函数中引用 r'< (\w+) >' 中选定的“(\w+)”部分以使该函数运行仅针对所选单词,而不是整个句子。 ?为了更清晰,我只想对两个 <> 符号内的单词进行操作,以获得这种类型的输出:
'< Coronavirus >: ripartiamo dalla Terra.Cosa mangeremo domani? < Food3D >, < insetti > e < carne sintetica >?'
感谢您抽出时间来回答我的简单问题。
最佳答案
你可以使用
import re
import wordninja
my_dict = wordninja.LanguageModel('words_italian_covid.txt.gz')
text = '#Coronavirus: ripartiamo dalla Terra.Cosa mangeremo domani? #Food3D, #insetti e #carnesintetica?'
print( re.sub(r'#(\w+)', lambda x: f'< {" ".join(my_dict.split(x.group(1)))} >', text) )
# => < Coronavirus >: ripartiamo dalla Terra.Cosa mangeremo domani? < Food3D >, < insetti > e < carne sintetica >?
参见 Python demo .
lambda x: f'< {" ".join(my_dict.split(x.group(1)))} >'
部分将匹配项替换为 < <FOUND_PHRASE_SPLIT_WITH_SPACES >
.
关于python - 正则表达式引用 re.sub 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70316963/