我有一些麻烦做饭了,产生这种结果的正则表达式:正则表达式:如何“退一步”
迈克,米莎1,2,米格尔1,2,3,4 ,5,6,7,18和Michea 2,3
如何退后一步在正则表达式中抛弃最后一场比赛?这是我需要一个逗号之前的空间不匹配。这是我想出了...
\d+(,|\r)
迈克1,米莎1,2,米格尔1,2,3,4,5,6,7,18,和迈克尔2,3
我有一些麻烦做饭了,产生这种结果的正则表达式:正则表达式:如何“退一步”
迈克,米莎1,2,米格尔1,2,3,4 ,5,6,7,18和Michea 2,3
如何退后一步在正则表达式中抛弃最后一场比赛?这是我需要一个逗号之前的空间不匹配。这是我想出了...
\d+(,|\r)
迈克1,米莎1,2,米格尔1,2,3,4,5,6,7,18,和迈克尔2,3
你问的关于正则表达式的特性叫做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
)
我相信\d+,(?!\s)
会做你想要什么。 ?!
是negative lookahead,只有在?!
之后出现而不是才出现在搜索字符串中的这个位置。
>>> 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']
“\ d +,(?!\ s)”似乎不起作用,但无论如何感谢。 – Mikhail 2010-12-19 21:49:34