首页 > 解决方案 > WUB 中的正则表达式提取字符

问题描述

我想要一个提取“WUB”中所有单词的正则表达式,但没有找到任何解决方案!例如它会从 "WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB"

以下字符串(不带引号) ["WE", "ARE", "THE", "CHAMPIONS"]

这是我到目前为止所尝试的:

((?:.(?!WUB))+) 但它给了我以下输出(来自上面的例子):

['WUBW', 'WUBAR', 'WU', 'WUBTH', 'WUBCHAMPION', 'WUBM', 'WUBFRIEN', 'WUB']

请帮助我更了解这个问题

标签: javascriptpythonc++regexperl

解决方案


$str =~ / WUB \K (?:(?!WUB).)+ (?=WUB) /sxg

或者

$str =~ / (?<=WUB) (?:(?!WUB).)+ (?=WUB) /sxg    # Probably slower.

从 之后开始WUB,但实际上在匹配 ( \K) 中不包括 WUB,查找一个或多个不是 . 开头的字符WUB。确保其后跟WUB( (?=WUB))。


如果字符串总是以 开头和结尾WUB,或者如果您不介意获取第一个之前WUB和最后一个之后的文本WUB,则以下内容会更清晰且肯定更快:

grep length, split /WUB/, $str

推荐阅读