查找具有前导或尾随空格的字符集

Find characters of a set with a leading OR trailing whitespace

我想编写正则表达式来匹配一组由白色 space 或其他 space 字符

开始或后继的字符

到目前为止我有 ((?<=[\s\S])|(?=[\s\S]))[^\s\p{L}\p{N}]+

但是在下面的演示中,它匹配的字符两边都没有 space。

任何建议将不胜感激

演示

在此示例中,问题是 gskinner.com,,并且应该只匹配逗号。然而句号用当前的正则表达式突出显示

https://regexr.com/4ndul

您可以使用此正则表达式来使用交替和环视:

(?<=\s)[^\s\p{L}\p{N}]+|[^\s\p{L}\p{N}]+(?=\s)

RegEx Demo

正则表达式详细信息:

  • (?<=\s)[^\s\p{L}\p{N}]+:匹配前面有空格的非单词非空白字符
  • |: 或
  • [^\s\p{L}\p{N}]+(?=\s):匹配后跟一个空格的非单词非空白字符

正则表达式具有执行条件 (if-then-else) 语句的能力。使用这个,我们可以检查字符前面是否有空格;否则,我们可以检查它后面是否跟有空格。如果做不到这一点,我们就不匹配。

(?(?<=^|\s)\p{P}|\p{P}(?=\s|$))

此正则表达式检查字符串的开头或您计划匹配的字符之前的空格,如果失败,则检查后跟空格或行尾的字符集。 \p{P} 查找任何类型的标点符号。 \p{P} 替换为您想要捕获的任何内容。

Demo