Java正则表达式(贪婪/非贪婪)



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

的组分开:
FIRST - GrouP              second.group.txt

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

我使用下面的正则表达式来分隔这两组:

([A-Z].+).*?([a-z]+.[a-z]+)
然而,它给出了一个错误的结果:
1: FIRST - GrouP second.grou
2: p.txt

我不明白,因为我使用了"非贪婪"分隔符(.*?)而不是贪婪分隔符(。*)

我在这里做错了什么?

谢谢

你可以使用这个正则表达式来匹配两个组:

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

RegEx演示

分手:

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: (?:..)用于非捕获组

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

(.*?-s*S+)|(S+.?)+
https://regex101.com/r/iW8mE5/1

查找任何后跟破折号、零个或多个空格以及非空白字符的字符。如果没有找到,它将查找后跟可选小数的非空白。

最新更新