我想用C#替换字符串中单个出现但不是两个字符串.
例如,我想用&空字符串替换,但不是在发生时&&.另一个例子,a&b&&c将ab&&c在更换后成为.
如果我使用正则表达式&[^&],它也会匹配后面的字符&,我不想替换它.
我找到的另一个解决方案是迭代字符串字符.
你知道一个更清洁的解决方案吗?
要仅匹配一个&(不在 之前或之后&),请使用环视 (?<!&)和(?!&):
(?<!&)&(?!&)
您尝试使用仍然匹配字符的否定字符类,并且您需要使用前瞻/后视来检查某些字符的缺失/存在,而不消耗它。
请参阅正则表达式.info:
如果你想匹配一些后面没有其他东西的东西,负前瞻是必不可少的。在解释字符类时,本教程解释了为什么不能使用否定字符类来匹配
q后面跟有u. 排除模式提供了解决方案:q(?!u)。Lookbehind 具有相同的效果,但向后工作。它告诉正则表达式引擎在字符串中暂时后退,以检查lookbehind 中的文本是否可以在那里匹配。
(?<!a)b匹配"b"前面没有a 的 a"a",使用负向后视。它不匹配cab,但匹配b(并且仅b)在床上或债务。
您可以匹配两者&和&&(或任意数量的重复),只用空字符串替换单个字符串:
str = Regex.Replace(str, "&+", m => m.Value.Length == 1 ? "" : m.Value);
| 归档时间: | 
 | 
| 查看次数: | 970 次 | 
| 最近记录: |