簡體   English   中英

使用正則表達式拆分模式

[英]Using regex to split pattern

我是在正則表達式中使用模式的新手。 我已經閱讀了Microsoft網站上的幾個鏈接,以為我理解了,但是我遇到了這種情況,並且不知道為什么它沒有提供我期望的結果。

我想將MyCmd拆分為字符串列表:print,a,+,b ,; 據我所知,正常分割不會使定界符保持不變。 因此,我想我已經嘗試過將正則表達式與以下定義的模式一起使用:(基本上,我想將字符串拆分為列表或隊列,並保留定界符;,+-* / {} [])。

 string MyCmd = "print a+b;";
 private string MyDelim = @"\b[\s;,\+\-\*\/%=\<\>\(\)\{\}\[\]]\w+";
 myStuff = new Queue<string>(Regex.Split(MyCmd,MyDelim));

但是到目前為止,我上面的代碼仍未產生預期的結果。

我的模式有什么不正確的地方?

我相信你可以用

var MyCmd = "print a+b;";
var MyDelim = @"([][\s;,+*/%=<>(){}-])";
var myStuff = Regex.Split(MyCmd,MyDelim).Where(p=> !string.IsNullOrWhiteSpace(p)).ToList();

輸出: printa+b ;

在此處輸入圖片說明

請注意, ([][\\s;,+*/%=<>(){}-])正則表達式用(...)括起來,並且捕獲組確保將捕獲的值也添加到結果數組中。

您需要使用.Where(p=> !string.IsNullOrWhiteSpace(p))來擺脫Regex.Split將獲得的空值。

我刪除了您的正則表達式中過多的轉義符,使它看起來“精簡而卑鄙”。

您的正則表達式不起作用的原因是@"\\b[\\s;,\\+\\-\\*\\/%=\\<\\>\\(\\)\\{\\}\\[\\]]\\w+"\\b單詞邊界之后的字符類中的空格和符號(要求單詞字符出現在它們之前),然后匹配一個或多個單詞字符。 由於沒有捕獲組,因此所有匹配項均從結果數組中消失。

Regex.Split是必經之路。 如果使用Regex.Matches ,則可以這樣:

string MyCmd = @"print  a+b;";
string MyDelim = @"([^;,+\-*/{}\[\]\)\(\s]+|[;,+\-*/{}\[\]\)\(])";
var myStuff = Regex.Matches(MyCmd, MyDelim).Cast<Match>().ToList().ConvertAll(m => m.Groups[1].Value.ToString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM