【问题标题】:Regex to Match All Whitespace After Word正则表达式匹配单词后的所有空格
【发布时间】:2015-08-25 19:32:37
【问题描述】:

我有这样的字符串: "2015/08/this filename has whitespace .jpg"

我需要匹配这些字符串中的空白字符。它们都将具有"2015/08/,并以" 结尾。

我正在使用 Sublime Text 2 在 SQL DB 转储中进行搜索和替换。我不知道如何进行比赛。我知道我可以将空格与\s 匹配,但我不知道如何包含这些组。

【问题讨论】:

  • 请描述\s+有什么问题:哪些空格不应该匹配?或者你想匹配引号外的空格?喜欢\s+(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)
  • 你可以使用"2015/08/.+.jpg"
  • 我正在尝试匹配 "2015/08/ 之后并以 .jpg 开头的引号内的所有空格。
  • 喜欢\s+(?=(?:(?:[^"]*"){2})*[^"]*"[^"]*$)?请让我知道它是否适合您。它比您要求的更通用。
  • 它在 regex101 中效果很好,但在 Sublime Text 中却不行。那可能是我自己解决的问题。

标签: regex


【解决方案1】:

根据我的评论,此表达式应该适用于具有相同数量的打开/关闭双引号的字符串

\s+(?=(?:(?:[^"]*"){2})*[^"]*"[^"]*$)

demo here。前瞻是检查奇数个双引号,直到文件结束。

另一种方法是用\G 定义边界并用\K 修剪匹配的开头:

(?:"\d{4}\/\d{2}\/|(?!^)\G)[^"\s]*\K\s(?=[^"]*")

demo

正则表达式找到匹配项:

  • (?:"\d{4}\/\d{2}\/|(?!^)\G) - 当子字符串以 2015/12/ 之类的数字开头或匹配成功后
  • [^"\s]*\K - 匹配不是空格或" 的所有字符,并由于\K 运算符而忽略它们
  • \s - 这里匹配一个空格符号
  • (?=[^"]*") - 前瞻检查我们大概在双引号内。

将空格替换为 %20 会导致:

【讨论】:

  • 注意,我认为这两种解决方案都是有效的,前提是开引号和闭引号的数量相等。
  • 感谢您的详尽解释。
猜你喜欢
  • 2016-03-02
  • 2013-07-09
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 2017-12-24
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多