Java正则表达式(贪婪/不同意)

时间:2015-09-24 17:20:56

标签: java regex

所以我试图将以下两个分组格式化为:

FIRST - GrouP              second.group.txt

第一组可以包含任何字符 第二组是点(。)分隔的字符串。

我使用以下正则表达式将这两组分开:

([A-Z].+).*?([a-z]+\.[a-z]+)

然而,它给出了错误的结果:

1: FIRST - GrouP second.grou
2: p.txt

我不明白,因为我正在使用" nongreedy"分离(。*?)而不是贪婪的(。*)

我在这里做错了什么?

由于

2 个答案:

答案 0 :(得分:2)

这个正则表达式可以匹配两个组:

\b([A-Z].+?)\s*\b([a-z]+(?:\.[a-z]+)+)\b

RegEx Demo

<强>解体:

\b               # word boundary
([A-Z].+?)       # match [A-Z] followed by 1 or more chars (lazy)
\s*              # match 0 or more spaces
\b               # word boundary
([a-z]+          # match 1 or more of [a-z] chars
(?:\.[a-z]+)+)   # match a group of dot followed by 1 or more [a-z] chars
\b               # word boundary

PS:(?:..)用于非捕获组

答案 1 :(得分:0)

这是一个非常紧凑的可能解决方案:

(.*?-\s*\S+)|(\S+\.?)+

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

它正在查找任何后跟短划线,零个或多个空格,然后是非空白字符的内容。如果没有找到,则查找非空格后跟可选的小数。