【问题标题】:Need regular expression to replace before and after while keeping the numbers in the middle需要正则表达式替换前后,同时保持中间的数字
【发布时间】:2014-08-23 00:14:58
【问题描述】:

我有以下:

itemid=44'>Red Flower</a>

我需要它是这样的:

_ITEMID_START_44_ITEMID_END_

这可以用正则表达式来完成吗?我需要保留 id(示例中为 44),并将左侧的所有内容替换为 _ITEMID_START_,将右侧的所有内容替换为 _ITEMID_END_。

注意:itemid 为一位或两位,但不得超过两位。

我发现了一些关于标记的正则表达式和反向引用的东西,这似乎可以工作,但语法让我很生气。

我试过这个(和其他尝试):

Find What: ^(\bitemid=\b)^([0-9][0-9]^)\b'>\b[a-z]+\b</a>\b)
Replace With: ^(\b_ITEMID_START_\b^2^(\b_ITEMID_END_\b

我正在使用 UltraEdit 在超过 20,000 个 *.html 文件中进行查找和替换。任何帮助将不胜感激。

【问题讨论】:

    标签: regex backreference ultraedit


    【解决方案1】:

    下面的正则表达式将匹配所有内容并仅捕获itemid= 之后的数字。而在替换部分,整行替换为_ITEMID_START_\1_ITEMID_END_\1代表第一个捕获的组,不同语言可能会有所不同)

    .*(?<=\bitemid=)([0-9]{1,2}).*
    

    而替换是,

    _ITEMID_START_\1_ITEMID_END_
    

    DEMO


    如果你只想替换,

    itemid=44'>Red Flower</a>
    

    _ITEMID_START_44_ITEMID_END_
    

    那么你的正则表达式就是,

    \bitemid=([0-9]{1,2})\'>[^<]*<\/a>
    

    而替换是,

    _ITEMID_START_\1_ITEMID_END_
    

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      Find What:    \bitemid=([0-9][0-9]?)'>[^<]*</a>
      Replace With: _ITEMID_START_\1_ITEMID_END_
      

      替换字符串是普通字符串,所有正则表达式特殊字符(反向引用除外)都失去了它们的特殊含义。

      \b 单词边界是来自\w 字符类的字符[A-Za-z0-9_] 的快捷方式) 与其他字符之间的限制。

      注意:我不能用ultraedit试试,如果你得到一个文字\1,用$1替换它

      【讨论】:

        【解决方案3】:

        Casimir et Hippolyte 的解决方案和Avinash Raj 的第一个解决方案都可以在 UltraEdit 中使用,选择 Perl 作为正则表达式引擎。 Avinash Raj 的第二个搜索字符串需要删除搜索字符串中字符 ' 左侧的反斜杠才能在 UltraEdit 中工作。

        UltraEdit 有 3 个正则表达式引擎:UltraEditUnixPerl

        问题中的搜索字符串是 UltraEdit 和 Perl 正则表达式语法的混合体,因此不起作用。

        使用 UltraEdit 正则表达式引擎:

        Find what: itemid=^([0-9]+^)*</a>
        Replace with: _ITEMID_START_^1_ITEMID_END_
        

        使用 UnixPerl 正则表达式引擎:

        Find what: itemid=([0-9]+).*</a>
        Replace with: _ITEMID_START_\1_ITEMID_END_
        

        更安全,因为不贪婪,但仅使用 Perl 正则表达式引擎:

        Find what: itemid=(\d+).*?</a>
        Replace with: _ITEMID_START_\1_ITEMID_END_
        

        IDM 发布了针对 UltraEdit 正则表达式引擎的强大提示 tagged expressions 和针对 Perl 正则表达式引擎的 Perl regular expressions: Backreferences

        【讨论】:

        • 非常感谢。 UE 中的三个选项让我感到困惑,因为我对基本的正则表达式并不完全了解,更不用说选择三个 :) 您使用 UE 正则表达式的示例效果很好。
        猜你喜欢
        • 1970-01-01
        • 2013-11-04
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 2022-08-15
        • 1970-01-01
        • 2015-09-16
        • 2014-10-01
        相关资源
        最近更新 更多