2013-09-22 143 views
0

事實上,我想匹配「??」之前和之後的東西, 我的代碼如下:如何使用正則表達式匹配數字和減號運算符?

//enter code here 
     Regex r = new Regex(@"(?'value'[0-9\-\./TSE]{1,}) \?\?(?'index'[A-Za-z:]{1,}"); 
     string s= 
@"39 ??Issue: 
9 ??Pages: 
1307-1325 ??DOI: 
10.1109/TSE.2013.14 ??Published:"; 

正如你所看到的,我想匹配這些東西:

value="39" index = "Issue:" 
value="9" index = "Pages:" 
value="1307-1325" index = "DOI:" 
value="10.1109/TSE.2013.14" index = "Published:" 

我覺得只是改變正則表達式的一個或兩個字符就可以解決這個問題。任何人都可以幫忙

+0

你可以搜索'''',或者分割字符串嗎?爲什麼你需要一個正則表達式?此外,您的模式已經匹配所有四行:[regex storm](http://regexstorm.net/tester?p=(%3f%27value%27%5b0-9%5c-%5c。%2fTSE%5d% 7B1%2C%7D)+%5C%3F%5C%3F(%3F%27index%27%5BA-ZA-Z%3A%5D%7B1%2C%7d)中與I = 39 +%3F%3fIssue%3A% 0d%0a9 +%3f%3fPages%3a%0d%0a1307-1325 +%3f%3fDOI%3a%0d%0a10.1109%2fTSE.2013.14 +%3f%3fPublished%3a)(在添加')'後) – Kobi

+0

我是這個網站的新手,不知道如何回覆你,kobi。非常感謝你!!! – zsf222

回答

1

如果你只是想要??之前和之後的信息,並且它總是以這種格式(值??索引),那麼正則表達式就是這樣的矯枉過正。只需使用String.Split

string s= @"39 ??Issue: 
9 ??Pages: 
1307-1325 ??DOI: 
10.1109/TSE.2013.14 ??Published:"; 

string[] splitValues = s.Split(new string[] { "??", "\r\n" }, StringSplitOptions.None); 

for (int i = 0; i < splitValues.Length; i += 2) 
{ 
    Console.WriteLine("value={0} index={1}", splitValues[i].Trim(), splitValues[i + 1].Trim()); 
} 

這將分裂的??及換行,導致輸出你要找的:

value="39" index = "Issue:" 
value="9" index = "Pages:" 
value="1307-1325" index = "DOI:" 
value="10.1109/TSE.2013.14" index = "Published:" 

上面的編碼分割上??\r\n(結束的字符串的行/換行符),產生一個元素數組,第一個元素是第一個值,第二個元素是第二個值,第三個元素是第二個行的第一個值,第四個元素是第二個值第二行等

for循環非常簡單 - i += 2部分只是將循環計數器增加2(而不是通常的1),因此它會在輸入中打印每行的值和索引。

相關問題