我有一个文本块,格式如下:
1.2.3.4.5
或1.2222.3.4.5
或1
或1.2
等
未知数量的数字和点(法律文件的部分)
如何将整个部分(1.2.3.4.5)捕获到一个组中?
我使用C#,但是任何正则表达式都可以,aI可以翻译它。
发布于 2012-07-17 02:22:36
已更新
使用此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-17 02:29:35
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-17 02:14:22
好吧,如果你知道你不能超过5,那么你可以
@"1+((.2+)((.3+)((.4+)(.5+)?)?)?)?"
您可以对每个符号的模式进行扩展,直到扩展到有限数量的符号
+
表示符号的任意出现次数,但至少为1。如果0有效,则可以改用*
如果您不希望捕获模式,请将?:
放在左括号后面,例如::(?:abc)
我省略了它们,以使正则表达式更具可读性。
那个?在括号后,表示前面符号的1或0。
现在,如果你不知道你的字符串能走多远,例如
"1.2.3.4......252525.262626.272727.......n.n.n"
比我的直觉告诉我,你不能用正则表达式做到这一点。
https://stackoverflow.com/questions/11510044
复制相似问题