我正在尝试创建一个正则表达式,它找到以点(。)开头的子串,只有数字并以另一个点结束,或者字符串结束。 为了澄清,这里有几个例子:
abc.123.ds => 123
aAsd.12sd.SAs.32.asd.3123 => 32 and 3123
111.2e2 => no result
aaa.bbb.13.320.a => 13 and 320
我尝试了不同的方法,这是我最接近结果的"^[.][0-9]+\.?$"
,但它仍然失败。
任何提示将不胜感激
答案 0 :(得分:4)
^[.][0-9]+\.?$
失败,因为^
强制模式在字符串的开头匹配,$
使其匹配字符串的结尾(完整的字符串),.?
1}}最后,当匹配时,将使用.
,并且不会让重叠的数字与前面的点匹配。
我建议使用lookarounds:
(?<=\.)[0-9]+(?=\.|$)
请参阅regex demo
<强>详情:
(?<=\.)
- 当前位置左侧必须有.
[0-9]+
- 1+位数(?=\.|$)
- 当前位置右侧必须有.
或字符串结尾。C#:
var res = Regex.Matches(str, @"(?<=\.)[0-9]+(?=\.|$)")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
答案 1 :(得分:0)
删除行锚的开头,为另一行做另一种选择:
\.[0-9]+(\.|$)
答案 2 :(得分:0)
使用捕获群组:
非常简单int[] result = Regex.Matches("\.(\d+)\.?").Cast<Match>().Select(x=> int.Parse(x.Groups[2].Value)).ToList();
第一组是你的整场比赛
\。(\ d +)\。?
第二个是第一个嵌套大括号 - 闭合表达式
\ d +