如何替换文本中的字符串列表,其中一些字符串是python中其他字符串的子字符串?
我有一个包含一些我想标记的单词的文本,要标记的单词包含在一个列表中。问题是其中一些单词是其他单词的子字符串,但我想标记列表中识别的最长字符串 例如,如果我的文本是“foo和bar与foo-bar不同”,并且我的列表包含“foo”、“bar”和“foo-bar”,那么结果应该是“[tag]foo[/tag]和[tag]bar[/tag tag]与[tag]foo-bar[/tag tag]不同。”如何替换文本中的字符串列表,其中一些字符串是python中其他字符串的子字符串?,python,regex,string,substring,Python,Regex,String,Substring,我有一个包含一些我想标记的单词的文本,要标记的单词包含在一个列表中。问题是其中一些单词是其他单词的子字符串,但我想标记列表中识别的最长字符串 例如,如果我的文本是“foo和bar与foo-bar不同”,并且我的列表包含“foo”、“bar”和“foo-bar”,那么结果应该是“[tag]foo[/tag]和[tag]bar[/tag tag]与[tag]foo-bar[/tag tag]不同。” 某个函数的代码应该是什么,字符串taggedText的值应该是“foo和bar与foo-bar不同。
某个函数的代码应该是什么,字符串taggedText的值应该是“foo和bar与foo-bar不同。”?如果我正确理解了您的问题,那么这就是您要查找的内容:-
text = "foo and bar are different from foo bar."
words = ["foo", "bar", "foo bar"]
add_tag = lambda var : "<tag>"+var+"</tag>"
result = '' # for final string
for var in text.split():
if var in words:
tmp = add_tag(var)
else:
tmp = var
result += " "+tmp
print result
return result
text=“foo和bar与foo-bar不同。”
单词=[“foo”,“bar”,“foo-bar”]
添加标签=lambda变量:“”+var+“”
最终字符串的结果=“”#
对于text.split()中的变量:
如果var为大写:
tmp=添加标签(var)
其他:
tmp=var
结果+=“”+tmp
打印结果
返回结果
这里的
add_tag()
方法提供了您在someFunction
中看到的内容 如果我正确理解了你的问题,那么这就是你要寻找的东西:-
text = "foo and bar are different from foo bar."
words = ["foo", "bar", "foo bar"]
add_tag = lambda var : "<tag>"+var+"</tag>"
result = '' # for final string
for var in text.split():
if var in words:
tmp = add_tag(var)
else:
tmp = var
result += " "+tmp
print result
return result
text=“foo和bar与foo-bar不同。”
单词=[“foo”,“bar”,“foo-bar”]
添加标签=lambda变量:“”+var+“”
最终字符串的结果=“”#
对于text.split()中的变量:
如果var为大写:
tmp=添加标签(var)
其他:
tmp=var
结果+=“”+tmp
打印结果
返回结果
这里的
add_tag()
方法提供了您在someFunction
中看到的内容 实现这一点的一个简单方法是按长度按相反顺序对单词进行排序,然后创建一个正则表达式word1 | word2 |……
。由于重新引擎总是第一次匹配,因此将首先捕获较长的字符串
import re
def tag_it(text, words):
return re.sub(
'|'.join(sorted(words, key=len, reverse=True)),
lambda m: '<tag>' + m.group(0) + '</tag>',
text)
text = "foo and bar are different from foo bar."
words = ["foo", "bar", "foo bar"]
print tag_it(text, words)
重新导入
def tag_it(文本、文字):
返回有关(
“|”。join(已排序(words,key=len,reverse=True)),
lambda m:''+m.group(0)+'',
(文本)
text=“foo和bar与foo-bar不同。”
单词=[“foo”,“bar”,“foo-bar”]
打印标签(文本、文字)
实现这一点的一个简单方法是按长度按相反顺序对单词进行排序,然后创建一个正则表达式word1 | word2 |……
。由于重新引擎总是第一次匹配,因此将首先捕获较长的字符串
import re
def tag_it(text, words):
return re.sub(
'|'.join(sorted(words, key=len, reverse=True)),
lambda m: '<tag>' + m.group(0) + '</tag>',
text)
text = "foo and bar are different from foo bar."
words = ["foo", "bar", "foo bar"]
print tag_it(text, words)
重新导入
def tag_it(文本、文字):
返回有关(
“|”。join(已排序(words,key=len,reverse=True)),
lambda m:''+m.group(0)+'',
(文本)
text=“foo和bar与foo-bar不同。”
单词=[“foo”,“bar”,“foo-bar”]
打印标签(文本、文字)
你能提出你的一个想法吗?我会使用一个函数,根据字符串的长度对单词列表进行排序,然后在文本中循环,标记所有的正数,同时检查标记词是否已经被
或
字符串圈起来……你能提出一个想法吗?我会使用一个函数,根据字符串的长度对单词列表进行排序,然后在文本中循环,标记所有的正数,同时检查标记词是否已被
或
字符串圈住。。。