在理解perl中的regex修饰符以转换为python时遇到困难

2024-04-20 16:15:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我在将这些perl正则表达式转换为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)

Tags: 文件方法httpstestcom消息datais
1条回答
网友
1楼 · 发布于 2024-04-20 16:15:54

第一个正则表达式只在开头加上ref///docs

说明:

/\]\((\/uploads\/.*?\.pdf)\)/g
  • \]匹配字符“]”
  • \(匹配字符“(”
    第一捕获组(/uploads/*?)?。pdf格式)
  • \/匹配字符“/”
  • uploads匹配字符“uploads”(区分大小写)
  • \/匹配字符“/”
  • .*?匹配任何字符(行终止符除外)
  • *?量词-零次和无限次之间的匹配,尽可能少的次数,根据需要扩展(lazy)
  • \.与字符“匹配”。你知道吗
  • 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)


我不知道您在第二个regex中真正想做什么,但是perl regex说要替换example.com网站任何变量$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表示点现在将匹配任何字符(包括换行符)

相关问题 更多 >