每行匹配第一个逗号的正则表达式

7

如何编写正则表达式以仅匹配第一个逗号,且只匹配该逗号?

我尝试过像,{1}这样的东西,我认为它与非贪婪限定符(如,(.*?))有关,但我没有成功。

我正在使用Notepad++将代码从另一种语言转换为JavaScript。 我想将第一个逗号变成冒号。 它看起来像这样:

'TJ', 'Tajikistan' ,
'TZ', 'Tanzania' ,
'TH', 'Thailand' ,
'TL', 'Timor-Leste' ,
'TG', 'Togo' ,
'TK', 'Tokelau' ,
'TO', 'Tongo' ,
'TT', 'Trinidad and Tobago' ,

查找内容:/,/
替换为::
没有进行任何替换操作,共计0处。

Notepad++的屏幕截图


1
只使用/,/,不使用/g吗? - Qtax
你的正则表达式有效。所以请按照 Qtax 的建议来进行操作。 - Valamas
4
为什么不用 string.indexOf(',') - acdcjunior
1
如@acdcjunior所说,如果可能的话,请使用string.indexOf(',')substr或类似方法结合使用,而不是使用正则表达式,因为正则表达式速度较慢。 - The Alpha
1
为什么@user1864610要如此讨厌呢?即使他们做了一些违反惯例的事情,为什么不对人友善和乐于助人呢? - Rob Kent
显示剩余4条评论
1个回答

18
你可以做的是,不仅仅只将第一个逗号替换为冒号,你可以自动替换逗号和逗号后面的所有内容,用冒号加上逗号后面的内容代替。 (例如,在 'TZ','Tanzania', 中,这种方法会将,'Tanzania',替换为:'Tanzania',。) 之后,由于该行的其余部分已经进行了替换,Notepad ++不会重新检查它是否包含逗号。
你可以使用捕获组来实现这一点,捕获组可以让替换字符串包含正则表达式匹配的一部分。
具体来说,你将用以下内容替换 ("查找内容"):
,(.*)
意思是“一个逗号(,),加上零个或多个字符(.*),并捕获后者(())”,并用这个(“替换为”):
:$1

意思是“冒号 (:),加上第一个捕获组所捕获的内容 ($1)”。


太棒了。这是如何工作的? - Parseltongue
3
在正则表达式中,(.*)表示“零个或多个非换行字符——并且‘捕获’它们(即记住它们以便稍后引用)。”在替换字符串中,$1表示“你所捕获的内容”。(如果你有多组 (...),那么你也可以使用 $2$3 等。)因此,这个正则表达式通过将逗号加上行尾的其余内容替换为冒号加上行尾的其余内容来实现。在此之后,由于行尾的其余内容已经进行了替换,Notepad++不会重新检查它是否包含逗号。 - ruakh
非常感谢您的解释。 - Parseltongue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接