【问题标题】:Regular expression for a single letter word单个字母单词的正则表达式
【发布时间】:2017-05-15 02:20:39
【问题描述】:

我将 Java 用于具有字符串输入流的应用程序。我想要一个正则表达式,它可以检测是否有一个单字母word“C/c”,而不仅仅是一个更长的字母“C/c”。

例如:

  • “我喜欢 C。” -> 是的
  • “我喜欢加拿大。” -> 错误
  • “C.” -> 是的
  • “我喜欢 C 和 C++。” -> 是的

我认为这个模式应该像“*c*”,前者*不应该是字母,后者*应该是, .; )!或空格之一。

我只是对正则表达式感到困惑。我尝试了一些类似[^A-Za-z]{0,}c[\,\.\;\s]{0,} 的模式模式,但还不行。

【问题讨论】:

  • @Robert 为什么不将其发布为答案?
  • @Robert 如果你不这样做,我会... :)

标签: java regex


【解决方案1】:

使用单词边界标记

String pattern = ".*\\b[Cc]\\b.*"; 

\b 匹配单词边界,即非字母旁边的任何字母。

您需要 2 个反斜杠来转义 Java 的反斜杠。

开头和结尾的.* 确保Java 不会尝试在输入的开头和结尾锚定模式。

【讨论】:

  • 感谢您的回答。这真的很有帮助。但是对于我没有说明的进一步要求,例如语法检查。例如, c-- 无效。所以我修改了后者的“b.*”。我注意到第一个“。*”可以被删除。最后一个例子在这里:regex101.com/r/C7XICk/1
【解决方案2】:

使用\W\W是非单词字符。

\W[cC]\W

https://regex101.com/r/khvMQk/1

【讨论】:

  • 感谢您提供正则表达式网站。测试真的很有帮助。为了更好地修改它,这是最终结果:regex101.com/r/C7XICk/1
【解决方案3】:

试试他的

var 模式= /(\bC\b)/i;

https://regex101.com/r/gN5Z8Q/1

【讨论】:

猜你喜欢
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多