正则表达式在逗号后添加空格但不是在逗号为千位分隔符时?

时间:2012-08-26 01:02:17

标签: php regex punctuation

以简单的方式使用php regexp,是否可以修改字符串以在逗号和句点之后添加空格,而不是在逗号或句点之前和之后添加数字,例如1,000.00?

String,looks like this with an amount of 1,000.00

需要改为......

String, looks like this with an amount of 1,000.00

这应该允许多个实例当然......这是我现在使用的,但它导致数字返回为1,000. 00

$punctuation = ',.;:';
$string = preg_replace('/(['.$punctuation.'])[\s]*/', '\1 ', $string);

3 个答案:

答案 0 :(得分:0)

您可以将'/(?<!\d),|,(?!\d{3})/'替换为', '

类似的东西:

$str = preg_replace('/(?<!\d),|,(?!\d{3})/', ', ', $str);

答案 1 :(得分:0)

我正在寻找这个正则表达式。

这篇文章真的对我很有帮助,我改进了Qtax提出的解决方案。

这是我的:

$ponctuations = array(','=>', ','\.'=>'. ',';'=>'; ',':'=>': ');
foreach($ponctuations as $ponctuation => $replace){
    $string = preg_replace('/(?<!\d)'.$ponctuation.'(?!\s)|'.$ponctuation.'(?!(\d|\s))/', $replace, $string);
}

有了这个解决方案,“像这样的句子”将不会改为“句子如:这个”(有两个空白的空间)

就是这样。

答案 2 :(得分:0)

尽管这已经很老了,但我一直在寻找同样的问题,并且在理解了解决方案之后给出了不同的答案。

此正则表达式不是检查逗号前的字符,而是检查逗号后的字符,因此可以将其限制为字母字符。同样,这不会在逗号后面创建两个空格的字符串。

%matplotlib inline

可以检查测试脚本here