Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换文本中的字符串列表,其中一些字符串是python中其他字符串的子字符串?_Python_Regex_String_Substring - Fatal编程技术网

如何替换文本中的字符串列表,其中一些字符串是python中其他字符串的子字符串?

如何替换文本中的字符串列表,其中一些字符串是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不同。

我有一个包含一些我想标记的单词的文本,要标记的单词包含在一个列表中。问题是其中一些单词是其他单词的子字符串,但我想标记列表中识别的最长字符串

例如,如果我的文本是“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不同。”?

如果我正确理解了您的问题,那么这就是您要查找的内容:-

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”]
打印标签(文本、文字)

你能提出你的一个想法吗?我会使用一个函数,根据字符串的长度对
单词列表进行排序,然后在
文本中循环,标记所有的正数,同时检查标记词是否已经被
字符串圈起来……你能提出一个想法吗?我会使用一个函数,根据字符串的长度对
单词列表进行排序,然后在
文本中循环,标记所有的正数,同时检查标记词是否已被
字符串圈住。。。