【发布时间】:2012-11-21 14:04:40
【问题描述】:
可能重复:
Find a pattern to match ‘a’, ignoring that ‘a’ which lies within ‘b’ and ‘c’
如果我有以下字符串(例如)
string q = "select field1 from t1 where field1 in (select field1 from t2)";
在这种情况下,我有
a = " from"; b = @"\(.* from.*\)"; => " from" within parenthesis
这里可以看到'a'是'b'的子串
我最接近的模式是
string pat = @"^((?!\(.* from.*\)).)* from((?!\(.* from.*\)).)*$";
但我需要将“pat”修改为 'a' such that 'a' is not a sub-string of 'b'...(“a”和“b”是可变模式)。我被困在用正则表达式翻译这个。我想用
string answer=Regex.Relace(q , pat , ",field2 from");
期望的输出:(答案中的值应该是)
"select field1,field2 from t1 where field1 in (select field1 from t2)"
【问题讨论】:
-
请格式化您的代码as代码(缩进4个空格,或使用编辑器上的代码按钮)。
-
所以你只想替换第一次出现?
-
我将它用于通用目的,事实上我需要这样的模式,以便替换不在括号中的任何“from”......你知道它在 sql 查询中唯一的一个它可能不一定成为第一个.. 但如果它不在括号中,那么它是我所知道的唯一可能的地方
-
@SamiAkram 你的?是一个列名..对吗?
-
感谢@Oded 让我的帖子看起来像样。并感谢您的支持..(我认为是 Anirudha)请帮助我找到并用正则表达式替换这个特殊的“来自”唯一的条件是它不应该像 (*from) 并且请帮助我发布问题。这是第一个,由于我的演示混乱,我被禁止了。我恳求人们指导我而不是投反对票,但由于投反对票而不得不将其删除两次并被禁止
标签: c# regex pattern-matching