Regex 用逗号替换字母和数字之间的空格

Regex 用逗号替换字母和数字之间的空格,regex,preg-replace,Regex,Preg Replace,我正在尝试替换php中的以下字符串: 2011.11.12 20:06,Teal'c Ostus,Solid Pyroxeres 46521,Pyroxeres 与: 注意:这里有5个逗号分隔的值 Time, Character, Item Type, Quantity, Item Group 请注意,仍有一些空格,例如日期和时间之间、名字和姓氏之间以及名称中包含多个单词的项目之间 此外,它不能替换\r和\n,因为有许多行类似于上面的行您可以使用它 $result = preg_replac

我正在尝试替换php中的以下字符串:

2011.11.12 20:06,Teal'c Ostus,Solid Pyroxeres 46521,Pyroxeres
与:

注意:这里有5个逗号分隔的值

Time, Character, Item Type, Quantity, Item Group
请注意,仍有一些空格,例如日期和时间之间、名字和姓氏之间以及名称中包含多个单词的项目之间

此外,它不能替换\r和\n,因为有许多行类似于上面的行

您可以使用它

$result = preg_replace('/(?<=[a-z_])\s+(?=\d)|(?<=\d)\s+(?=[a-z_])/i', ',', $subject);
$result=preg_replace('/(?在perl中,您可以使用:

$line =~ s/([A-Za-z])\s+(\d)/$1,$2/g;

以下是用于搜索的正则表达式:

(\d{4}\.\d{2}\.\d{2}\s\d{2}:\d{2},[^,]*,\D*)\s(\d{5},.*)
和replace的正则表达式

$1,$2
说明:

2011.11.12 20:06,Teal'c Ostus,Solid Pyroxeres,46521,Pyroxeres
搜索的正则表达式

Replace的正则表达式


我希望这能解释一下(有用但有时令人困惑的)“魔力”正则表达式。设计和测试正则表达式的一个好工具叫做Expresso,你可以找到。如果你需要expression tester的在线帮助和正则表达式库,你可以找到它。你不需要说你使用的是什么语言,但类似的工具应该可以工作:

搜索:
([A-Za-z])(\d)
替换:
\1\2
如何:

$str = "2011.11.12 20:06,Teal'c Ostus,Solid Pyroxeres 46521,Pyroxeres";
$str = preg_replace('/(\D+) (\d+)/', "$1,$2", $str);
echo $str;
输出:

2011.11.12 20:06,Teal'c Ostus,Solid Pyroxeres,46521,Pyroxeres

这看起来似乎有效,但它将\r\n字符替换为well@Wes如果您不希望发生这种情况,请用
[A-Za-z!]
替换
\D
。我编辑了答案以解决
\D
问题。效果相同。它仍然会删除新行字符。我尝试添加[^\S\r\n]但后来它把其他一些东西搞砸了。这就像一种魅力。谢谢你。你认为你能像Narenda yadala dod那样做一个解释,让其他读书的人(和我一起)能理解吗@韦斯:我在回答中添加了对正则表达式的解释。非常感谢。这样的回答应该得到更多+1。谢谢你的回答。@韦斯+1不是唯一的目标,总有一天我会有一个问题,需要别人的帮助:-)
$1      Insert capture group number 1
,       Insert a comma
$2      Insert capture group number 2
$str = "2011.11.12 20:06,Teal'c Ostus,Solid Pyroxeres 46521,Pyroxeres";
$str = preg_replace('/(\D+) (\d+)/', "$1,$2", $str);
echo $str;
2011.11.12 20:06,Teal'c Ostus,Solid Pyroxeres,46521,Pyroxeres