我有一个格式如下的文本块:
1.2.3.4.5
或1.2222.3.4.5
或1
或1.2
等
未知数量的数字和点(法律文件的部分)
如何将完整部分(1.2.3.4.5)捕获到一个组中?
我使用C#,但任何正则表达式都没问题,我可以翻译它。
答案 0 :(得分:4)
<强>已更新强>
使用此Regex
:
Regex.Matches(inputString, @"\d[\.\d]*(?<!\.)");
解释
\d digits (0-9)
[.\d]* any character of: '.', digits (0-9)
(0 or more times, matching the most amount possible))
(?<! subexpression) Zero-width negative lookbehind assertion.
答案 1 :(得分:4)
string s = "1.2.3.4.5 or 1.2222.3.4.5 or 1 or 1.2 or 2222.3333.111.5 etc";
var matches = Regex.Matches(s, @"\d+(\.\d+)*").Cast<Match>()
.Select(m => m.Value)
.ToArray();
答案 2 :(得分:1)
好吧,如果你知道你不能超过5,那么你可以做到
@"1+((.2+)((.3+)((.4+)(.5+)?)?)?)?"
你可以为每个符号扩展该模式,最多可以扩展到有限数量的符号
+
表示符号出现的次数,但至少为1.如果有效,则可以使用*
代替
?:
放在开头的父母身上
例如:(?:abc)
?在括号之后,表示前一个符号的1或0。
现在,如果您不知道字符串可以走多远,例如
"1.2.3.4......252525.262626.272727.......n.n.n"
比我的直觉告诉我你不能用正则表达式做到这一点。