没有逗号后面的空格的正则表达式

3

我目前正在尝试创建一个表达式,它可以抓取所有没有空格的逗号和所有冒号。

我尝试了(,([^\s]))|([:]),它已经接近了,但是还会抓取逗号后面没有空格的字符。

我还尝试了(,\s+)|([:]),它会抓取所有有空格的逗号和所有冒号以及空格。

我想选择的内容在以下部分用* *括起来:

Hello, my name is*:* tibsar*,*okay?

你有什么想法吗?


1
你有一些你期望的有效匹配的示例吗? - user2705585
@noob 更新了问题! - Sara Fuerst
1个回答

19

我觉得这个正则表达式可以完成工作。

正则表达式:(,(?=\S)|:)

解释:

  • (?=\S) 这个正向预查检查逗号后面的字符,它不是一个空白字符,但不会捕获在匹配中。[^\s]\S 是一样的。

  • 并且使用了选择符|来匹配可能出现在任何位置的冒号:

Regex101演示

如有需要,匹配行末的逗号。


你在(,([^\s]))|([:])(,\s+)|([:])方面出了什么问题?

  • (,([^\s]))匹配逗号后面的非空白字符,但它也将其捕获在匹配中。

  • (,\s+)直接匹配逗号后面的空白字符,所以完全错误。


请注意,这个正则表达式在字符串/行的末尾是不起作用的(因为字符串的末尾不是一个字符,所以不会匹配\S)。你应该使用负向预查来代替:,(?! )。@tibsar: 请注意,\S(和\s)非常广泛,涵盖了除空格之外的很多内容。以防万一,如果空格和制表符之间的区别对你很重要。 - Joey
@Joey:谢谢你的建议。OP没有明确指定末尾是否有逗号,所以我在排除部分没有添加\n。但是我已经对此进行了改进。在这里查看改进后的版本。如果你有更多建议,欢迎提出。 - user2705585

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