Python中的Perl正则表达式

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 但我就是无法在

我在从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
但我就是无法在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忘了这一点。