首页 > 解决方案 > 怎么说,在小组赛中,“除非只有空格”?

问题描述

我想匹配引号之间的文本,但前提是它包含文本而不仅仅是空格。

换句话说

hello world "this is matched" bonjour

应该匹配this is matched,但是

hello world "   " bonjour

不应该匹配任何东西。

之前的一个问题几乎是我想要的,只是它使用 JS 进行测试(这也是我目前在 Python 中的解决方法)。OP的评论提到否定\s,但我认为它没有在任何地方使用(作为评论除外)

有没有一种简单的方法可以将这样的条件添加到正则表达式"(.+)"

标签: regexwhitespace

解决方案


您还可以使用与至少一个非空白字符匹配的捕获组,而不是"

"(\s*[^\s"][^"]*)"

模式匹配:

  • "从字面上匹配
  • (捕获组 1
    • \s*[^\s"]匹配可选的空白字符,后跟一个非空白字符,而不是"
    • [^"]*可选匹配任何字符,除了"
  • )关闭组
  • "从字面上匹配

正则表达式演示

如果可以转义双引号,您可以使用@anubhava的答案中也演示的方法,匹配除"or之外的任何字符,\并允许匹配转义字符。

"(\s*[^\s"][^"\\]*(?:\\.[^"\\]*)*)"

正则表达式演示


推荐阅读