正则表达式查找和替换,但保留代码(LETTER-NUMBER-NUMBER)完整

时间:2011-10-21 17:58:55

标签: regex

我有以下标记:

<overlay id="B66" x="600">

我想更改x值,但保留其他所有内容,但我有其他x值等于600,所以我不能只在x上找到并替换。

我使用了以下找到所有标签的内容:

\<overlay id=\"[A-Z]{1}[0-9]{2}\" x=\"600\"

但是,我希望在更改x值时保持id(“B66”)不变。

我应该把什么作为替换值?

3 个答案:

答案 0 :(得分:1)

如果您将正则表达式定义为:

"(<overlay id=\"[A-Z]{1}[0-9]{2}\" x=\")(600)(\")"

要将其拆分为三个捕获组,其中x的值在第二个中,以下替换字符串应该执行您想要的操作:

"$1New Value$3"

哪会产生:

<overlay id="B66" x="New Value"

修改

这至少适用于使用的语言是.NET和Regex.Replace方法。

答案 1 :(得分:0)

答案取决于您愿意在其中实施的语言。

例如,在sed的shell中:

$ echo '<overlay id="B66" x="600">' | sed -re 's/<overlay id="([A-Z]{1}[0-9]{2})" x=\"600\"/<overlay id="\1" x="666"/'
<overlay id="B66" x="666">

无论如何,请阅读您使用的语言替换功能的文档。

答案 2 :(得分:0)

如果您具有外观断言的灵活性..

搜索:
'%(<overlay(?=\s)[^>]*(?<=\s)x\s*=\s*(["\']))\s*600\s*(\2[^>]*/?>)%'

取代:
"${1}9000${3}"

expanded:
'%
  (<overlay (?=\s)[^>]* (?<=\s)x\s*=\s*(["']))
  \s*600\s*
  (\2[^>]*/?>)
%x'