在保持数字在中间的同时需要前后替换正则表达式

时间:2014-07-02 09:11:26

标签: regex backreference ultraedit

我有以下内容:

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文件。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

以下正则表达式将匹配所有内容并仅捕获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_

答案 1 :(得分:0)

你可以试试这个:

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

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

\b单词边界是来自\w字符类[A-Za-z0-9_]的快捷方式和另一个字符的字符之间的限制。

注意:我无法使用ultraedit进行尝试,如果您获得文字\1,请将其替换为$1

答案 2 :(得分:0)

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

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

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

使用 UltraEdit reguar表达式引擎:

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

使用 Unix Perl 正则表达式引擎:

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