所以我试图将以下两个分组格式化为:
FIRST - GrouP second.group.txt
第一组可以包含任何字符 第二组是点(。)分隔的字符串。
我使用以下正则表达式将这两组分开:
([A-Z].+).*?([a-z]+\.[a-z]+)
然而,它给出了错误的结果:
1: FIRST - GrouP second.grou
2: p.txt
我不明白,因为我正在使用" nongreedy"分离(。*?)而不是贪婪的(。*)
我在这里做错了什么?
由于
答案 0 :(得分:2)
这个正则表达式可以匹配两个组:
\b([A-Z].+?)\s*\b([a-z]+(?:\.[a-z]+)+)\b
<强>解体:强>
\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
它正在查找任何后跟短划线,零个或多个空格,然后是非空白字符的内容。如果没有找到,则查找非空格后跟可选的小数。