我有一个格式如下的文本块:
1.2.3.4.5
或1.2222.3.4.5
或1
或1.2
等
未知数量的数字和点(法律文件的部分)
如何将整个部分 (1.2.3.4.5) 捕获到一个组中?
我使用 C#,但任何正则表达式都可以,我可以翻译它。
更新
使用这个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.
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();
好吧,如果你知道你不能超过 5,那么你可以做到
@"1+((.2+)((.3+)((.4+)(.5+)?)?)?)?"
并且您可以为每个符号扩展该模式,最多为有限数量的符号
表示符号出现的+
任意次数,但至少出现 1 次。如果 0 有效,则可以*
改用
?:
如果您不想像示例那样捕获模式,请放在左括号之后:我(?:abc)
省略了它们以使正则表达式更具可读性。
这 ?括号后,表示前一个符号的 1 或 0。
现在,如果你不知道你的字符串可以走多远,例如
"1.2.3.4......252525.262626.272727.......n.n.n"
比我的直觉告诉我,你不能用正则表达式做到这一点。