我在将这些perl regex转换为python时遇到了麻烦,之前我已经转换了一些简单的正则表达式。我不太了解修饰符/ s和/ is,我知道/ g是全局的。
我也不知道第一个到底是做什么的。第二个删除带有HTML文件中消息的特定li标签。
# First
$data =~ s/\]\((\/uploads\/.*?\.pdf)\)/\]\(ref\/\/\/docs$1\)/g;
# Second
$data =~ s/<li>.*?https:\/\/www\.example\.com.*?<\/li>/$test/is;
# What I think might work in python
data = re.sub('<li>.*?https:\/\/www\.example\.com.*?<\/li>/' + test, data, 1)
答案 0 :(得分:1)
第一个正则表达式不执行任何操作,只是将ref///docs
附加到开头。
说明:
/\]\((\/uploads\/.*?\.pdf)\)/g
\]
与字符“]”匹配\(
与字符“(”匹配
\/
与字符“ /”匹配uploads
与字符“上载”(区分大小写)匹配\/
与字符“ /”匹配.*?
匹配任何字符(行终止符除外)*?
量词-在零次和无限制次数之间进行匹配,并尽可能减少匹配次数,并根据需要扩展(延迟)\.
与字符“。”匹配。pdf
匹配字符pdf(区分大小写)\)
与字符) 全局模式标志
g
修饰符:全局。所有比赛(第一次比赛后不返回)考虑示例:
test_str = "](/uploads/something.pdf)"
perl:
my $test_str = "](/uploads/something.pdf)";
$test_str =~ s/\]\((\/uploads\/.*?\.pdf)\)/\]\(ref\/\/\/docs$1\)/g;
python:
test_str = "](/uploads/something.pdf)"
test_str = re.sub(r"\]\((\/uploads\/.*?\.pdf)\)", r"](ref///docs\1)", test_str)
替换后的打印test_str
输出:
](ref///docs/uploads/something.pdf)
我不知道您真正想在第二个正则表达式中做什么,但是perl正则表达式表示要将example.com的任何URL替换为任何变量$test
。让我们玩一下:
perl:
my $test = "test";
my $data = "<li>list 1 https://www.example.com/site </li>";
$data =~ s/<li>.*?https:\/\/www\.example\.com.*?<\/li>/$test/is;
python:
data = "<li>list 1 https://www.example.com/site </li>";
test = "test"
data = re.sub(r"<li>.*?https:\/\/www\.example\.com.*?<\/li>", test, data, re.S|re.I)
替换后的打印data
输出:
test
修饰符:
i
表示忽略大小写(不区分大小写的搜索)s
表示点现在可以匹配任何字符(包括换行符)