我在编写产生这个结果的正则表达式时遇到了一些麻烦:
Mike 1 ,misha 1,2 ,miguel 1,2,3,4,5,6,7,18 ,以及Michea的 2,3
如何退回正则表达式并丢弃最后一场比赛?那就是我需要一个逗号才能找到不匹配的空格。这就是我想出来的......
\d+(,|\r)
Mike 1, misha 1,2, miguel 1,2,3,4,5,6,7,18,和迈克尔的 2,3
答案 0 :(得分:2)
您要问的正则表达式功能称为positive lookbehind。但在你的情况下,我认为你不需要它。试试这个:
\d+(?:,\d+)*
在您的示例中,这将匹配以逗号分隔的数字列表,并排除名称和尾随逗号和空格。
以下是用PHP编写的一小段测试代码,用于验证输入:
<?php
$input = "Mike1, misha1,2, miguel1,2,3,4,5,6,7,18, and Micheal2,3";
$matches = array();
preg_match_all('/\d+(?:,\d+)*/', $input, $matches);
print_r($matches[0]);
?>
输出:
Array
(
[0] => 1
[1] => 1,2
[2] => 1,2,3,4,5,6,7,18
[3] => 2,3
)
答案 1 :(得分:0)
我相信\d+,(?!\s)
会做你想做的事。 ?!
是negative lookahead,仅在?!
后面的内容 not 出现在搜索字符串中的此位置时才匹配。
>>> re.findall(r'\d+,(?!\s)', 'Mike1, misha1,2, miguel1,2,3,4,5,6,7,18, and Michea2,3')
['1,', '1,', '2,', '3,', '4,', '5,', '6,', '7,', '2,']
或者,如果您想匹配以逗号分隔的数字列表,不包括最终逗号,请使用\d+(?:,\d+)*
。
>>> re.findall(r'\d+(?:,\d+)*', 'Mike1, misha1,2, miguel1,2,3,4,5,6,7,18, and Michea2,3')
['1', '1,2', '1,2,3,4,5,6,7,18', '2,3']