2014-04-07 39 views
0

我有一句話,在句子的起始點和結束點之間可以包含任何特殊字符或數字或字母,但不包含任何字。正則表達式匹配兩個字符串之間的任何字詞除外

要對我的觀點更清楚,我已經用一個例子說明如下:

我有這樣一個句子"Today's Market value 0.5 percent"

現在從上面這句話中的「市場價值」和「百分比」,我必須之間沒有得到任何其他的話。

Statements allowed: 
1) "Today's Market value* 0.5 percent" 
2) "Today's Market value\1 0.5 percent" 
3) "Today's Market value \1 0.5 percent" 
4) "Today's Market value e 0.5 percent" 
5) "Today's Market value 0.5 percent" 

Statements not allowed: 
1) "Today's market value is 0.5 percent" 
2) "Today's market value is 0.5 percent" 

3) "Today's Market value is 0.5 percent" 

而我主要關心的是拿起這裏的市場價值,即「0.5」。

請建議我構建正則表達式來完成我的上述要求的正確方法。

+0

爲什麼'value e 0.5 percent'允許? – Robin

+0

所以你想要百分之前寫的任何數字? – aelor

+0

@Robin值0.5是允許的,因爲這是我的興趣點,我的意思是我真正想要提取的值。 – user2786794

回答

0

下面是代碼提取感興趣的數量,如果該字符串是確定的:

string[] strList = new[] { 
    @"Today's Market value* 0.5 percent", 
    @"Today's Market value\1 0.5 percent", 
    @"Today's Market value \1 0.5 percent", 
    @"Today's Market value e 0.5 percent", 
    @"Today's Market value 0.5 percent", 
    @"Today's market value is 0.5 percent", 
    @"Today's market value is 0.5 percent", 
    @"Today's Market value is 0.5 percent" 
}; 
foreach (string str in strList) 
{ 
    Match m = Regex.Match(str, @"(?<=Market value.*\s)(?<!Market value.*[a-zA-Z]{2}.*)\d+(\.\d+)?(?=\s.*percent)(?!.*[a-zA-Z]{2}.*percent)", RegexOptions.Singleline); 
    if (m.Success) 
     Console.WriteLine("{0} : {1}", m.Value, str); 
} 

輸出:

0.5 : Today's Market value* 0.5 percent 
0.5 : Today's Market value\1 0.5 percent 
0.5 : Today's Market value \1 0.5 percent 
0.5 : Today's Market value e 0.5 percent 
0.5 : Today's Market value 0.5 percent 

基本思想:數量應該由之前市場價值文字,任何東西空格,但不應該在前面加市場價值+任意位置的任意字母+2或更多字母文本。另外,數字應遵循空白什麼%的文本,但不應該跟着2個或更多的連續字母的任何地方+%的

0

試試這個正則表達式:

\bMarket value\b(?!\s+is\s)[\s\S]*?(\d+(?:\.\d+)?)\s*percent\b 

(?!\s+is\s)爲負先行,檢查存在Market value後無is

Online Demo

相關問題