Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 - Fatal编程技术网

Python正则表达式仅用于第一个匹配,而忽略其他匹配

Python正则表达式仅用于第一个匹配,而忽略其他匹配,python,regex,Python,Regex,我试图在python中定义一个正则表达式以匹配以下字符串: prefix:long-name prefix:long-name:other-prefix:long-name:long-name 在示例文本中: prefix:long-name asdd prefix:long-name asddasd asdd prefix:long-name; prefix:long-name prefix:long-name:other-prefix:long-name:long-name prefi

我试图在python中定义一个正则表达式以匹配以下字符串:

prefix:long-name
prefix:long-name:other-prefix:long-name:long-name
在示例文本中:

prefix:long-name
asdd prefix:long-name asddasd
asdd prefix:long-name;
 prefix:long-name
prefix:long-name:other-prefix:long-name:long-name
prefix:long-name
但它不应在以下字符串处匹配:

prefix:long-name
prefix:long-name:other-prefix:long-name:long-name
我尝试使用匹配组跟踪正则表达式,但无法正常工作:

([^;\{\}\s\*\+\'"]+)(:)([^;\{\}\s\*\+\'"]+)
问题是,正则表达式将匹配上述两个字符串

字符串的末尾可以是行尾,但也可以是
[\s\{\}\;]
中的一个

有人有小费吗


提前感谢。

您可以尝试使用以下模式:

(?<!\S)[^\s:]+:[^\s:]+(?!\S)

我可以使用以下正则表达式模式使用
lookahead
lookahead
-断言来解决需求:


(?)^|(?它不匹配。例如,
abc:def:ghi:jkl
将匹配
ghi:jkl
,但它不应该匹配。您有一个错误。它很可能是基于复制和粘贴的。您已经忘记了上面模式中的
^
$
,但在示例脚本中使用了它!而且使用regex101.com而不是rextester.com可能更好@csabinho是的,你是对的。我只是用Rextester向你展示了Python代码的工作原理,否则我同意你的观点。@TimBiegeleisen现在可以了。看。我要把你的答案标记为正确。那么,如果不是文件结尾或行结尾,字符串的结尾是什么呢?我更新了我的帖子。它可能是[\s\{\{\\;],你为什么有
{
在您的字符类中出现两次?或者您指的是文字字符串
[\s{;]
?还是仅仅
\s{;
?不清楚…谢谢。我更新了我的帖子,提供了更多信息。请查看我的答案,了解可能更好的方法。您可以使用一个否定的前瞻来排除长匹配。