将Perl正则表达式转换为python正则表达式

时间:2015-03-05 10:50:39

标签: python regex perl

我被要求将perl脚本转换为python。

我不了解perl脚本。

perl脚本包含以下代码行:

 1. if ($option =~ "Fed5") 
 2. if (($option =~ m/Fed5/i) && ($option =~ m/KD/i)) 
 3. if (($option =~ m/Fed5/i) && ($option !~ m/KD/i))

我知道这与perl正则表达式有关。

请让我知道如何获得与上述声明等效的python。

2 个答案:

答案 0 :(得分:1)

perl中的m只意味着匹配//之间的正则表达式 并且/ i是一个修改器,表示忽略大小写。

http://perldoc.perl.org/functions/m.html

=〜运算符是绑定运算符:http://perldoc.perl.org/perlop.html#Binding-Operators

所以:

    1. 匹配字符串Fed5
    1. 匹配字符串Fed5忽略大小写,并匹配字符串KD也忽略大小写。
    1. 匹配字符串Fed5忽略大小写,不匹配KD也忽略大小写。

答案 1 :(得分:1)

1. if ($option =~ "Fed5") 

等效的python代码:

if re.search(r'Fed5', option):

Perl代码:

2. if (($option =~ m/Fed5/i) && ($option =~ m/KD/i)) 

等效的python代码:

if re.search(r'(?i)Fed5', option) and re.search(r'(?i)KD', option):

Perl代码:

if (($option =~ m/Fed5/i) && ($option !~ m/KD/i))

等效的python代码:

if re.search(r'(?i)(?!.*kd)Fed5', option):

我缩短了第三个条件。

或者使用双if条件。

if re.search(r'(?i)Fed5', option):
    if not re.search(r'(?i)kd', option):