我想编写一个Regex,匹配包含字母、空白和数字后加上点的字符串.数字可以出现在字符串中的任何位置,并且可以有多个.例如:

Foo            -> Match
Foo Bar        -> Match
Foo 1 Bar      -> No Match
Foo 1. Bar     -> Match
Foo 11. Bar    -> Match
1. Foo 11. Bar -> Match

我知道我可以将字母和空白与[a-zA-Z ]+进行匹配,将数字后面的点与\d+(?=\.)进行匹配.但当我将后者插入前者时,它会匹配所有数字,以及字面字符"+"、"("、"?', '=', '. '和'.

有没有办法做到这一点?

推荐答案

Character classes是为了匹配字符,您无法将零宽断言放入字符类中.请注意\b如何在字符类中失go 其单词边界含义并开始匹配退格符(至少在大多数regex风格中).

在这种情况下,您可以将零次或多次出现的一个或多个数字与后面的点或您允许的字符进行匹配:

^(?:\d+\.|[a-zA-Z ])*$

regex demo如果不允许使用空字符串,请将*替换为$锚之前的+.

Details:

  • ^ -字符串开始
  • (?:\d+\.|[a-zA-Z ])* - zero or more repetitions of
    • \d+\. -一个或多个数字,然后是.
    • [a-zA-Z ] -一个ASCI字母或一个常规空间
  • $ -字符串的结尾

在Java代码中,不需要将^$String.matches()一起使用:

text.matches("(?:\\d+\\.|[a-zA-Z ])*")

Java相关问答推荐

当一个链表中间有一个循环时,它的松散部分会发生什么?

ittext pdf延迟签名,签名无效

为什么BasicComboBoxRenderer在文本不存在或文本为空的情况下设置两次文本?

无法在org. openjfx:javafx—fxml:21的下列变体之间进行 Select

XPages-在第二次点击按钮之前延迟

Java中是否有某种类型的池可以避免重复最近的算术运算?

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

FALSE:它应该在什么时候使用?

如何让JavaFx应用程序识别依赖项?

用户填充的数组列表永不结束循环

try 从REST API返回对象列表时出错

Groovy/Java:匹配带引号的命令选项

不能在 map 上移除折线

Intellij 2023 IDE:始终在顶部显示菜单栏

HBox内部的左对齐按钮(如果重要的话,在页码内)

Java编译器是否进行了持续的折叠优化,以及如何进行判断?

OpenJDK20:JEP434:Foreign Function&;内存API(第二次预览)

ResponseEntity.控制器截断响应的JSON部分

ControlsFX RangeSlider在方向垂直时滞后

javax.crypto-密码对象-提供者服务是如何工作的?