2015-10-16 139 views
-1

我有以下的和我提出了哪些過去了,哪些失敗:匹配正則表達式...使用C#

Regex regex = new Regex(@"^\d\b.\d\s\b(Chapter)\b\s\d"); 
     var tru = regex.IsMatch("3.2 Chapter 23");//passed 
     tru = regex.IsMatch("3.1 Chapter 1");//passed 
     tru = regex.IsMatch("32.1 Chapter 1");//failed 
     tru = regex.IsMatch("3.31 Chapter 1");//failed 
     tru = regex.IsMatch("33.3 Chapter 13");//failed 
     tru = regex.IsMatch("32.23 Chapter 13");//failed 

我的字符串正確的格式應該是:

開始了1到3位數字,然後一個「‘則1〜3位的數字,然後一個’。」然後一個空格「‘那麼這個詞’章」,然後一個空格」「然後又1至3位數

我使用.NET 4.5

因此所有6應該通過我的例子應該通過。快到了。我在正則表達式中錯過了什麼?提前致謝。

+0

只是爲了自己和他人,可你說你用的是什麼版本的.NET框架的? (最近碰到了一個特殊版本的問題,通配符搜索我自己) – cowboydan

+0

我更新我的問題 – BoundForGlory

+0

我認爲你需要躲避點在你的正則表達式。它應該是'\。'因爲一個點本身可以​​匹配任何角色。 – user2023861

回答

1

你的問題是\d一個數字相匹配。替換用\d+匹配一個或多個數字:

^\d+\b.\d+\s\b(Chapter)\b\s\d+ 

或者,如果你想限制它特別是1至3個位數,使用{1,3}

^\d{1,3}\b.\d{1,3}\s\b(Chapter)\b\s\d{1,3} 

這裏是它如何工作的:https://regex101.com/r/dO7tU9/1

2

根據您的描述,不關你的樣品要經過:

開始用1至3位數然後再1至3位數字,然後一個「‘’。」

您的要求是兩個.總。你的樣品都沒有。

如果你希望你的樣品通過,一個.,你正在尋找:

^\d{1,3}\.\d{1,3} Chapter \d{1,3} 

組要求在你\d使用{1,3}


如果是一個三位數你需要額外.,只需添加另一個\.相應(和改變你的樣本相匹配)

+0

兩個樣本確實通過了......看看安德森·派門特爾的答案......他建立了我所擁有的並且完美的工作 – BoundForGlory

+0

字邊界('\ b')不是你所需要的。我說明你的描述與你的樣本不符。 – Jonesopolis

1

^\ d {1,3} \ d {1,3} \ S(章)\ S \ d {1,3} $

此正則表達式的狀態:

任何十進制數字{恰好1至3倍}。任何十進制數字{恰好1至3倍}空白(章)空白字符任何十進制數字{恰好1至3倍}全局

1

以下正則表達式滿足您的要求:

^\ d {1,3} 。\ d {1,3} \ sChapter \ S \ d {1,3} $