Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
Regex 如何根据词汇表列表拆分字符串?_Regex_Split_Nlp_Tokenize - Fatal编程技术网

Regex 如何根据词汇表列表拆分字符串?

Regex 如何根据词汇表列表拆分字符串?,regex,split,nlp,tokenize,Regex,Split,Nlp,Tokenize,给出一个词汇表: glossaries = ['USA', '34'] 目标是使用词汇表中的项目,并使用词汇表作为分隔符拆分字符串。例如,给定字符串和词汇表,一个\u isolate\u glossaries()函数: glossaries = ['USA', '34'] word = '1934USABUSA' _isolate_glossaries(word, glossaries) 应输出: ['19', '34', 'USA', 'B', 'USA'] 我试过: def isola

给出一个词汇表:

glossaries = ['USA', '34']
目标是使用词汇表中的项目,并使用词汇表作为分隔符拆分字符串。例如,给定字符串和词汇表,一个
\u isolate\u glossaries()
函数:

glossaries = ['USA', '34']
word = '1934USABUSA'
_isolate_glossaries(word, glossaries)
应输出:

['19', '34', 'USA', 'B', 'USA']
我试过:

def isolate_glossary(word, glossary):
    print(word, glossary)
    # Check that word == glossary and glossary not in word
    if re.match('^{}$'.format(glossary), word) or not re.search(glossary, word):
        return [word]
    else:
        segments = re.split(r'({})'.format(glossary), word)
        segments, ending = segments[:-1], segments[-1] # Remove the last catch with null string.
        return segments

def _isolate_glossaries(word, glossaries):
    word_segments = [word]
    for gloss in glossaries:
        word_segments = [out_segment
                         for segment in word_segments 
                         for out_segment in isolate_glossary(segment, gloss)] 
    return word_segments

它可以工作,但看起来有点太复杂了,无法进行这么多级别的循环和正则表达式拆分是否有更好的方法根据词汇表拆分字符串?

若要按列表中的项目拆分字符串,请动态创建一个正则表达式,其中包含由管道分隔的项目,这些项目都包含在捕获组中(非捕获组在输出中不包含项目本身):


请参见

您应该为split方法动态创建一个正则表达式,例如
(UDS | 34)
。词汇表项位于替换项的一侧。例如:
re.split(“({})”.format(“|”).join(词汇表)),word)
?是的,请在这里检查,谢谢@revo!这比我在问题中提到的原始函数要清楚得多。
list = re.split('({})'.format('|'.join(glossaries)), word);
print ([x for x in list if x]) # filter non-word items