2013-05-13 101 views
0

我有一個正則表達式,並希望忽略字符串中的任何'(撇號)。正則表達式可以討論討論String manipulation: How to replace a string with a specific pattern忽略來自正則表達式的'(撇號)

RegEx: \\(\\s*'(?<text>[^'']*)'\\s*,\\s*(?<pname>[\\w\\[\\]]+)\\s*\\) 

內發現基本上提供的正則表達式沒有在方案中工作,而且{}文本包含'(撇號)。您能否讓RegEx忽略{text}中的任何apostroph'e?

For eg: 

substringof('B's',Name) should be replaced by Name.Contains("B's") 
substringof('B'',Name) should be replaced by Name.Contains("B'") 
substringof('''',Name) should be replaced by Name.Contains("'") 

欣賞它!謝謝。

+0

它看起來像你正在尋找的字符串是這樣的:'('foo',bar [] baz [])'注意:你似乎需要撇號'''在末尾串。如果你想「忽略」撇號,試試像這樣:'([^'] [']?)+'這意味着,期望的字符集隨後是可選的撇號,然後重複1次或更多次。 – 2013-05-13 18:28:53

+0

好的,會試着讓你知道 – 2013-05-13 18:36:41

+0

謝謝,但對不起,這沒有工作 – 2013-05-13 18:53:49

回答

1

似乎很難處理案件''''。這就是爲什麼我選擇使用代表和另一個替換來解決問題。

static void Main(string[] args) 
{ 
    var subjects = new string[] {"substringof('xxxx',Name)", "substringof('B's',Name)", "substringof('B'',Name)", "substringof('''',Name)"}; 

    Regex reg = new Regex(@"substringof\('(.+?)'\s*,\s*([\w\[\]]+)\)"); 
    foreach (string subject in subjects) { 
     string result = reg.Replace(subject, delegate(Match m) { return m.Groups[2].Value + ".Contains(\"" + m.Groups[1].Value.Replace("''", "'") + "\")"; }); 
     Console.WriteLine(result); 
    } 
} 
+0

太好了。這對我嘗試過的情侶場景是完美的。我已經運行了更多的測試。 – 2013-05-13 18:54:55

+0

嗨卡西米爾,我有幾個情況下,不在這種情況下工作。 1.例如:substringof('B'',Name)應該被Name.Contains(「B'」)替換,並且2. substringof('''',Name)應該被Name.Contains(「'」 ) – 2013-05-13 19:32:25

+0

@EvolvingTechie:你應該編輯你的文章與這些案件 – 2013-05-13 19:55:48