【问题标题】:Matching word with period at end in regex在正则表达式的末尾匹配单词与句点
【发布时间】:2016-12-22 07:32:06
【问题描述】:

目前我正在尝试查看 regex java 中单词末尾是否有句点、问号或感叹号。这是我正在尝试的:

if(Pattern.matches("[.!?]$", "test.")){
   // do stuff
}

这里我只是使用示例test.,它是一个单词,末尾有一个句点。这个正则表达式不会把它捡起来。我使用这个正则表达式是因为它会在句尾查找三个.!?,因为我使用的是$

【问题讨论】:

  • 您忘记针对[.!?] 之前的任何内容进行测试
  • 你这是什么意思?
  • test. 会失败,因为它不是?!.,后面是EOI。根据您的模式,它以这些符号开头。

标签: java regex


【解决方案1】:

Pattern.matches 匹配整个字符串。你可以修改你的模式,或者改用Matcher.find

选项 1:

Pattern.matches(".*[.!?]", "test.")

选项 2:

Pattern.compile("[.!?]$").matcher("test.").find()

【讨论】:

    【解决方案2】:

    您可以使用正则表达式的正向前瞻来搜索单词前面的.!?。您可以查看this StackOverflow answer 以了解有关正和负前瞻的更多信息。

    (\w+)(?=[.!?])
    

    看到这个link

    使用

    Pattern.matches("(\\w+)(?=[.!?])]", "test! tset some ohter! wordsome?")
    

    匹配信息

    MATCH 1
    1.  [0-4]   `test`
    MATCH 2
    1.  [16-21] `ohter`
    MATCH 3
    1.  [23-31] `wordsome`
    

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 2018-07-17
      • 1970-01-01
      相关资源
      最近更新 更多