2

我有以下内容:

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 文件中进行查找和替换。任何帮助将不胜感激。

4

3 回答 3

0

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

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

替代品是,

_ITEMID_START_\1_ITEMID_END_

演示


如果只想更换,

itemid=44'>Red Flower</a>

_ITEMID_START_44_ITEMID_END_

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

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

替代品是,

_ITEMID_START_\1_ITEMID_END_
于 2014-07-02T09:15:42.517 回答
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

于 2014-07-02T09:18:01.913 回答
0

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正则表达式引擎和Perl 正则表达式的强大提示标记表达式: Perl正则表达式引擎的反向引用。

于 2014-07-02T10:19:44.243 回答