我有以下内容:
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文件。非常感谢任何帮助。
答案 0 :(得分: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_
答案 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。