快速和髒的Perl溶液
use strict;
use warnings;
$/ = undef;
my $str = <DATA>;
my $i = 0;
$str =~ s/(<ce:para) (?=\s|>) (.*?)>/"$1 id=\"p" . sprintf("%04d",$i+=5) . "\">"/xsge;
print $str;
__DATA__
<ce:para id="p0010">xxx</ce:para>**<ce:para>xxx</ce:para**>
**<ce:para>vvv</ce:para>**
<ce:para id="p0015">vvv</ce:para>
<ce:para id="p0020">vv</ce:para>
**<ce:para>vvvv</ce:para><ce:para>xxxxxxx</ce:para>**
<ce:para id="p0070">vvddd</ce:para>
輸出>>
<ce:para id="p0005">xxx</ce:para>**<ce:para id="p0010">xxx</ce:para**>
**<ce:para id="p0015">vvv</ce:para>**
<ce:para id="p0020">vvv</ce:para>
<ce:para id="p0025">vv</ce:para>
**<ce:para id="p0030">vvvv</ce:para><ce:para id="p0035">xxxxxxx</ce:para>**
<ce:para id="p0040">vvddd</ce:para>
編輯 - 如果只改變沒有ID的那些,,,,
use strict;
use warnings;
$/ = undef;
my $str = <DATA>;
my $i = 0;
$str =~
s/
(<ce:para) # (1)
(?= \s | >)
\s*
(?:
id=
"p
(\d{1,}) # (2)
"
| .*?
)
>
/
defined $2 and $i=$2-5;
"$1 id=\"p" . sprintf("%04d",$i+=5) . "\">"
/xsge;
print $str;
__DATA__
<ce:para id="p0010">xxx</ce:para>**<ce:para>xxx</ce:para**>
**<ce:para>vvv</ce:para>**
<ce:para id="p0015">vvv</ce:para>
<ce:para id="p0020">vv</ce:para>
**<ce:para>vvvv</ce:para><ce:para>xxxxxxx</ce:para>**
<ce:para id="p0070">vvddd</ce:para>
輸出>>
<ce:para id="p0010">xxx</ce:para>**<ce:para id="p0015">xxx</ce:para**>
**<ce:para id="p0020">vvv</ce:para>**
<ce:para id="p0015">vvv</ce:para>
<ce:para id="p0020">vv</ce:para>
**<ce:para id="p0025">vvvv</ce:para><ce:para id="p0030">xxxxxxx</ce:para>**
<ce:para id="p0070">vvddd</ce:para>
來源
2014-01-30 20:08:09
sln
您不能將粗體添加到標記爲代碼的內容,但我們可以看到圖片。我沒有得到的是你想要做的。 – simbabque
匹配所有「ce:para」標籤後,您不需要重新分配/重命名id值嗎? – tenub
可能必須重做所有現有的ID。 – sln