【问题标题】:How to improve this regex that I wrote?如何改进我写的这个正则表达式?
【发布时间】:2022-07-31 17:55:34
【问题描述】:

我写了这个正则表达式。

(?i)(#?covid\s|#?covid\W|#?covid\d+)

但它似乎与大写单词 (COVID) 不匹配。我该如何改进它?

【问题讨论】:

  • 它不会匹配字符串"COVID"(或"covid")!它必须有一个尾随空格 (\s) 或一个非单词字符 (\W) 或至少一位数字 (\d+)
  • 应该匹配它:regex101.com/r/HegPg1/1;您可以通过分解它来改进您的正则表达式:(?i)#?covid(\s|\W|\d+)
  • 啊,请注意,您的正则表达式会强制匹配 COVID 之后的附加字符(空格、非单词字符或某些数字),因此 COVID 在行尾(或单独匹配) ) 将不匹配
  • 由于某些原因,正则表达式显示正确的结果。但是我的java代码没有考虑到COVID。模式 pattern = Pattern.compile("(?i)#?covid(\\s|\\W|\\d+)");匹配器 matcher = pattern.matcher(tweet.getText()); boolean matchFound = matcher.find();
  • 注意:find() 用于查找; matches() 用于匹配 - 如果整个输入字符串与正则表达式匹配,稍后仅返回 true - 请包含有问题的代码,而不是评论;最好还包括输入(来自tweet.getText() 的值

标签: java regex


【解决方案1】:

假设您要确保不匹配单词的一部分,我会使用 \b 单词边界而不是匹配 COVID 后跟 \W\s

(?i)#?covid\d*\b

这避免了在您的解决方案的行尾匹配 covid 的问题。

【讨论】:

  • 其中一个要求是匹配covid4me&u。所以当covid这个词后面有一个数字时是一个有效的表达方式。
  • @DamienAsseya (?i)#?covid(\b|\d*) 对你有用吗?
  • @Damien this 应该被包含在问题中 - 现在你正在改变问题并使试图帮助你的所有努力无效:-/
  • @Aaron 要求之一是匹配 covid4me&u。所以当covid这个词后面有一个数字时是一个有效的表达方式。
  • @DamienAsseya (?i)#?covid(\b|\d*) 对你有用吗?
猜你喜欢
  • 1970-01-01
  • 2017-11-06
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多