【问题标题】:Regular Expression to Match Non-Whitespace Characters正则表达式匹配非空白字符
【发布时间】:2018-05-03 02:04:12
【问题描述】:

我需要创建一个匹配以下内容的正则表达式:

JG2144-141/hello

!

但不是:

laptop bag

或仅由空白字符组成的字符串 (' ')。

现在我有[A-Za-z0-9-!/\S],但它无法正常工作,因为它仍然与笔记本电脑和包单独匹配。它根本不应该与笔记本电脑包和空字符串匹配。

【问题讨论】:

  • 詹妮弗,你最终达到了你所需要的吗?请告知。如果我的回答引导您找到解决方案,请考虑接受它。

标签: regex nsregularexpression


【解决方案1】:

一般来说,要匹配任何非空白字符,您可以使用

\S              # Common modern regex flavors
[^[:space:]]    # POSIX compliant
[[:^space:]]    # POSIX extension (available in some flavors)
%S              # Lua patterns

[A-Za-z0-9-!/\S] 中的\S 使这个字符类等于\S,但您要确保字符串中的所有字符都是非空白字符。这就是为什么你应该用^$ 锚包装模式,并在\S 之后添加一个+ 量词以匹配此子模式的1 次或多次出现。

你可以使用

^\S+$

regex demo

详情

  • ^ - 字符串开头
  • \S+ - 1 个或多个非空白字符
  • $ - 字符串结束。

【讨论】:

  • 好的,有道理,谢谢。如果我想在单词的开头留一个空格,我会怎么做?例如:""" JG2144-141/你好!"""
  • @JenniferHall:如果您的意思是要匹配前导/尾随 0+ 个空格,^\s*\S+\s*$。或匹配任何非单词字符:^\W*\S+\W*$^\s*\S+\W*$
  • 不,我的意思是即使之前有空格,它也应该匹配。就像你把单词放在三引号“””中,并且在“”之后的下一行有 JG2144-141/hello,除非它与“””在同一行,否则它不会匹配。跨度>
  • @JenniferHall 请制定规则,因为您的示例不足以推断这些规则。
  • @JenniferHall 抱歉,这没有意义。你在尝试解析 Python 代码吗?