当前位置:  开发笔记 > 编程语言 > 正文

可以使用Regex进行这种特殊的字符串操作吗?

如何解决《可以使用Regex进行这种特殊的字符串操作吗?》经验,为你挑选了2个好方法。

我需要在字符串中用字符(比如说)P替换字符(比如说)x,但前提是它包含在带引号的子字符串中.一个例子使它更清楚:

axbx'cxdxe'fxgh'ixj'k  -> axbx'cPdPe'fxgh'iPj'k

为简单起见,我们假设引号总是成对出现.

显而易见的方法是一次只处理一个字符串(简单的状态机方法);
但是,我想知道是否可以使用正则表达式一次完成所有处理.

我的目标语言是C#,但我想我的问题与任何具有内置或支持正则表达式的语言有关.



1> jop..:

我将Greg Hewgill的python代码转换为C#并且它有效!

[Test]
public void ReplaceTextInQuotes()
{
  Assert.AreEqual("axbx'cPdPe'fxgh'iPj'k", 
    Regex.Replace("axbx'cxdxe'fxgh'ixj'k",
      @"x(?=[^']*'([^']|'[^']*')*$)", "P"));
}

那个测试过去了.



2> Greg Hewgill..:

我能用Python做到这一点:

>>> import re
>>> re.sub(r"x(?=[^']*'([^']|'[^']*')*$)", "P", "axbx'cxdxe'fxgh'ixj'k")
"axbx'cPdPe'fxgh'iPj'k"

这样做是使用非捕获匹配(?= ...)来检查字符x是否在带引号的字符串中.它会查找下一个引号之前的一些非引号字符,然后查找单个字符或引用字符组的序列,直到字符串结尾.

这取决于您的假设,即报价始终是平衡的.这也不是很有效.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有