我有一個格式化像這樣的文本塊:正則表達式:部分名稱的長度未知?
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