我有一个格式化像这样的文本块:正则表达式:部分名称的长度未知?
1.2.3.4.5
或1.2222.3.4.5
或1
或1.2
等
的不明数量的数字和点(法律文件的部分)
的我怎样才能将整个部分(1.2.3.4.5)捕获到一个组中?
我使用C#,但任何正则表达式都很好,我可以翻译它。
我有一个格式化像这样的文本块:正则表达式:部分名称的长度未知?
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.
你错过了一个'('。 - > @“([\ d。] +)”当我尝试它的时候工作 – GrayFox374 2012-07-16 18:38:05
@ GrayFox374:一个新的正则表达式!坦克的注意力 – Ria 2012-07-16 19:15:42
好,如果你知道你不能超越5,那么你可以做
@"1+((.2+)((.3+)((.4+)(.5+)?)?)?)?"
,您可以扩大该模式的每一个符号,由有限数量的符号
在+
指任何数量的符号出现的,但至少1.如果0是有效的,你可以使用*
代替
把?:
开口parenthesies后,如果您不想要模式被捕获0像例子:(?:abc)
我省略了它们使正则表达式更具可读性。
的?在括号之后,表示前面的符号的1或0。
现在,如果你不知道你的字符串能走多远,例如
"1.2.3.4......252525.262626.272727.......n.n.n"
比我的直觉告诉我,你不能做到这一点与正则表达式。
我意识到我的错误,并编辑我的帖子是正确的 – 2012-07-16 18:28:23
接受的答案表明您对订购做出了错误的假设。 – 2012-07-16 19:44:23
@LB我没有upvote所有的答案,我的投票没有被锁定 – 2012-07-16 19:46:56
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();
2222.3333.111.5 – 2012-07-16 18:32:04
@SamIam它捕获了'2222.3333.111.5' – 2012-07-16 18:32:37
它看起来好像它不应该也是'28359.205.295829.72827 – 2012-07-16 18:35:32
@downvoter(S):栈溢出礼仪会对您发表评论说:为什么你连同你的反对票一起投票呢? – Bob2Chiv 2012-07-16 18:34:01
@ Bob2Chiv我做到了。我应该为每一个相同的,但错误的答案写下评论吗? – 2012-07-16 18:36:36
有人会在这里发表致意。 – GrayFox374 2012-07-16 18:38:59