【问题标题】:Matching the character before a linebreak, excluding whitespaces?在换行符之前匹配字符,不包括空格?
【发布时间】:2019-07-30 17:36:33
【问题描述】:

所以我目前有一个正则表达式 (https://regex101.com/r/zBE4Ju/1) 可以突出显示换行前后的单词。这很好,但问题是有时在换行符之前出现的单词之后会有空格。所以他们结束了

您可以在我的 regex101 上看到问题是如何发生的,并且我已经概述了问题。无论单词后是否有空格,我都需要识别换行符前后的单词。

(\w*(?:[\n](?![\n])\w*)+)

您可以在此处查看它的运行情况https://regex101.com/r/zBE4Ju/3

预期:第 1 行 实际:第 3 行

【问题讨论】:

标签: regex


【解决方案1】:

你可以使用$1来自:

/([^ ]+) *(\r|\n)/gm

https://regex101.com/r/o87VP7/5

【讨论】:

  • 这行得通,但我需要能够容纳带有句点的单词
  • @Andrew 查看更新。与\w+ 相比,[^ ]+ 将更具包容性。
  • 谢谢!我最终将 \w+ 替换为 \S+
  • @Andrew 当然,这也有效。如果对您的帮助最大,请随时将我的回答标记为“已接受”。
  • 完成。再次感谢
【解决方案2】:

如果您想突出显示句子中的最后一个“单词”,后跟可能的空格和换行符,您可以重复 0+ 次匹配 1+ 非空白字符后跟 1+ 空格的组。

然后在匹配非空白字符(\S+) 的组中捕获并匹配可能的空格,后跟换行符。

^ *(?:\S+ +)*(\S+) *\r?\n

说明

  • ^ 字符串开始
  • *匹配0+次空格
  • (?:非捕获组
    • \S+ + 匹配 1+ 个非空白字符和 1+ 个空格 -)*关闭非捕获组并重复0+次(也匹配开头的单个单词)
  • (\S+)捕获组1,匹配1+次非空白字符
  • *\r?\n 匹配 0+ 次空格后跟换行符

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2010-11-12
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多