2

我有一个格式如下的文本块:

1.2.3.4.51.2222.3.4.511.2

未知数量的数字和点(法律文件的部分)

如何将整个部分 (1.2.3.4.5) 捕获到一个组中?

我使用 C#,但任何正则表达式都可以,我可以翻译它。

4

3 回答 3

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.
于 2012-07-16T18:22:36.333 回答
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();
于 2012-07-16T18:29:35.297 回答
1

好吧,如果你知道你不能超过 5,那么你可以做到

@"1+((.2+)((.3+)((.4+)(.5+)?)?)?)?"

并且您可以为每个符号扩展该模式,最多为有限数量的符号

表示符号出现的+任意次数,但至少出现 1 次。如果 0 有效,则可以*改用

?:如果您想像示例那样捕获模式,请放在左括号之后:我(?:abc)
省略了它们以使正则表达式更具可读性。

这 ?括号后,表示前一个符号的 1 或 0。

现在,如果你不知道你的字符串可以走多远,例如

"1.2.3.4......252525.262626.272727.......n.n.n"比我的直觉告诉我,你不能用正则表达式做到这一点。

于 2012-07-16T18:14:21.800 回答