【问题标题】:Regex to check if String is one word in Java正则表达式检查 String 是否是 Java 中的一个单词
【发布时间】:2021-12-29 10:32:52
【问题描述】:

我需要正则表达式来检查字符串是否只有一个单词(例如“This”、“Country”、“Boston”、“Programming”)。

到目前为止,我使用了另一种方法来检查字符串是否包含空格。但是,我确信这可以使用正则表达式来完成。

我认为一种可能的方式是"^\w{2,}\s"。这工作正常吗?还有其他可能的答案吗?

【问题讨论】:

  • “一个字”是什么意思?简单地说它是非空的并且不包含空格?如果是这样,^\S+$ 会起作用。
  • 你的问题的标题和第一句话可以有不同的解释。
  • @Thefourthbird 我编辑了它,让它更清晰。
  • 所以 OP 有可能的前导/尾随空格?在这种情况下,^\s*\S+\s*$ 可能会起作用。也许这个问题可以用不同的方式更好地解决,可能在数据的源头上?
  • 模式 ^\w{2,}\s 匹配字符串开头的 2 个或更多单词字符,后跟强制空白字符。这取决于对“单词”的要求是什么,但在 Java 中你也可以写 ^\h*\w{2,}\h*$ regex101.com/r/eFDjky/1

标签: java regex regex-lookarounds regex-greedy


【解决方案1】:

^\w{2,}\s 模式匹配字符串开头的 2 个或更多单词字符,后跟强制空白字符(也可以匹配换行符)

由于模式也是未锚定的,它也可以匹配Boston test中的Boston

如果您想使用\h* 匹配由可选水平空白字符包围的至少2 个字符的单个单词,并添加一个锚点$ 来断言字符串的结尾。

^\h*\w{2,}\h*$

Regex demo

在 Java 中

String regex = "^\\h*\\w{2,}\\h*$";

【讨论】:

  • 在Java中,字符串的matches方法必须匹配整个字符串:前面的^和后面的$是多余的,可以删除而不影响任何东西。您对 unanchored 的评论不正确:它将匹配“波士顿测试”
  • @Bohemian 没有 .matches 方法的概念。
  • 你会如何检查一个字符串是否匹配一个正则表达式?
  • @Bohemian 模式本身可以获得部分匹配。没有关于如何使用模式的概念。如果一个人决定将 Matcher 与 find 一起使用,您可以获得部分匹配 ideone.com/60DUcJ 但 .matches 确实是一个更好的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多