所以,这是模式
^(.*)\..*$|^(.*)$
测试字符串: file.tar.gz 2.文件
首次测试时,我会在'group 1'中获得'file.tar',在'group 2'中获得'file'。但我只希望输出只有一组。我不能提出任何其他模式。甚至不确定是否可能。
答案 0 :(得分:1)
您需要使第一个.*
延迟,并在可选组中使用否定字符类:
^(.*?)(?:\.[^.]*)?$
请参阅regex demo
<强>详情:
^
- 字符串开头(.*?)
- 尽可能少的0个字符(?:\.[^.]*)?
- 一个可选的非捕获组,匹配1或0个序列:
\.
- 一个点[^.]*
- 除.
$
- 字符串结束。答案 1 :(得分:0)
另一种使用双重否定且没有捕获组的方法:
^.*(?![^.])
(字符串开头的任意数量的字符,后面跟不是一个不是点的字符。)
&#34;后面没有一个不是一个点的字符&#34; &LT; =&GT; &#34;后跟一个点或字符串的结尾&#34;