Python中的Perl正则表达式
我在从Perl到Python的正则表达式转换方面遇到问题。我有以下代码:Python中的Perl正则表达式,python,regex,perl,Python,Regex,Perl,我在从Perl到Python的正则表达式转换方面遇到问题。我有以下代码: my $str_old = my $str = '$x start $x bar$xy $$x end $x'; $str =~ s/(\s|^)(\$x)(\s|$)/$1\$Q$3/g; print $str_old."\n"; print $str."\n"; 它应该输出这个 $x start $x bar$xy $$x end $x $Q start $Q bar$xy $$x end $Q 但我就是无法在
my $str_old = my $str = '$x start $x bar$xy $$x end $x';
$str =~ s/(\s|^)(\$x)(\s|$)/$1\$Q$3/g;
print $str_old."\n";
print $str."\n";
它应该输出这个
$x start $x bar$xy $$x end $x
$Q start $Q bar$xy $$x end $Q
但我就是无法在Python中使用它。试试这个:
>>> import re
>>> re.sub(r'(\s|^)(\$x)(\s|$)', r'\1$Q\3', '$x start $x bar$xy $$x end $x')
'$Q start $Q bar$xy $$x end $Q'
import re
str_old = str = '$x start $x bar$xy $$x end $x' # You can remove this semicolon
# str = re.sub( '(\s|^)(\$x)(\s|$)' , '$Q', str)
# ^^ You're not placing the spaces back.
str = re.sub( '(\s|^)\$x(\s|$)' , '\\1$Q\\2', str)
print(str)
print(str_old)
也就是说,您应该原始处理正则表达式字符串和替换字符串:
str = re.sub(r'(\s|^)\$x(\s|$)' , r'\1$Q\2', str)
最后,避免在python中使用变量名str
。已经有一个名为str
的函数:
import re
str_old = s = '$x start $x bar$xy $$x end $x'
str = re.sub(r'(\s|^)\$x(\s|$)' , r'\1$Q\2', str)
print(str)
print(str_old)
如果不想使用backrefereces,可以使用lookarounds:
import re
str_old = s = '$x start $x bar$xy $$x end $x' # You can remove this semicolon
str = re.sub(r'(?:(?<=\s)|(?<=^))\$x(?=\s|$)' , '$Q', str)
# Since you don't have backreferences, you can now drop the rawing.
print(str)
print(str_old)
重新导入
str_old=s='$x start$x bar$xy$$x end$x'#您可以删除此分号
str=re.sub(r’)(?:(?您在python中使用的代码行是什么?正如@Jerry所说,请显示您的python代码我进入这种状态,但它会删除空格>导入re str_old=str='$x start$x bar$xy$$x end$x';str=re.sub('(\s|^)(\$x)(\s|$),'$Q',str print(str)print(str old)谢谢,这正是我想要的,但我刚刚意识到原始正则表达式不能处理像“$x$x”(只有第一个$x将被替换)这样的字符串。有没有一个好的方法来纠正它?@xfrog:用简单的英语描述你希望正则表达式做什么,提供示例输入/输出,以及你当前的尝试(一个完整的最小示例):发生了什么?您希望发生什么?和@xfrog既然您希望它为$x$x
工作,请使用此处的最后一个代码块。谢谢,它可以工作。我只需将它稍微更改为:re.sub(r'(?:(@xfrog哦,您说得对!用python忘了这一点。