Regex可以用于此特定的字符串操作吗?

发布于 2021-01-29 17:27:23

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

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

为了简单起见,我们假设报价总是成对出现。

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

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

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我能够使用Python做到这一点:

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

    这是使用非捕获匹配(?=
    …)检查字符x是否在带引号的字符串内。它寻找直到下一个引号的一些非引号字符,然后寻找单个字符或带引号的字符组的序列,直到字符串的结尾。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看