您希望您的正则表达式与编译器针对标记之间的空白一样灵活。这样做和模仿空白使用会使模式非常混乱。下面的代码(对不起:Perl,不是Python)就地编辑你的源文件。
#! /usr/bin/perl -i.bak
use warnings;
use strict;
my $template =
'^(public
String
Get)(\w+)(\(\) { return
m_ParsedValue . get \(m_Tags . get \()(\d+)(\) \) ; })$';
$template =~ s/ +/\\s*/g;
$template =~ s/(\r?\n)+/\\s+/g;
my $getter = qr/$template/x;
die "Usage: $0 after new-name source ..\n" unless @ARGV >= 3;
my $after = shift;
my $add = shift;
my $index;
while (<>) {
unless (/$getter/) {
print;
next;
}
my($abc,$name,$lmno,$i,$xyz) = ($1,$2,$3,$4,$5);
if (defined $index) {
print join "" => $abc, $name, $lmno, ++$index, $xyz;
}
else {
if ($name eq $after) {
$index = $i;
print; print join "" => $abc, $add, $lmno, ++$index, $xyz;
}
else { print; }
}
}
例如,
$ ./add-after Jane Foo code.java
$ cat code.java
Foo extends Bar{
public Foo(){
m_Tags.add("Jane");
m_Tags.add("Bob");
m_Tags.add("Jim");
}
public String GetJane() { return m_ParsedValue.get(m_Tags.get(1)); }
public String GetFoo() { return m_ParsedValue.get(m_Tags.get(2)); }
public String GetBob() { return m_ParsedValue.get(m_Tags.get(3)); }
public String GetJim() { return m_ParsedValue.get(m_Tags.get(4)); }
}