鱼C论坛

 找回密码
 立即注册
查看: 2018|回复: 3

[已解决]正则表达式问题

[复制链接]
发表于 2023-8-21 20:45:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import re
a = re.search(r".*[.](?!bat|exe$).*", "as.batf")
print(a)

为什么打印结果是None,而不是as.batf,求救。
最佳答案
2023-8-21 20:45:28
问题的原因是正则表达式中的断言部分有问题。断言部分 (?!bat|exe$) 表示匹配不以"bat"或"exe"结尾的字符串。然而,在输入字符串"as.batf"中,字符串以"batf"结尾,因此不满足断言条件,导致匹配失败。

要解决这个问题,你可以修改正则表达式,使用正向断言来匹配以"bat"或"exe"结尾之外的字符串。修改后的代码如下:
import re
a = re.search(r".*[.](?!(bat|exe)$).*", "as.batf")
print(a)

这样,正则表达式中的断言部分 (?!(bat|exe)$) 表示匹配不以"bat"或"exe"结尾的字符串。运行代码后,输出结果将会是"as.batf"。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-21 20:45:28 | 显示全部楼层    本楼为最佳答案   
问题的原因是正则表达式中的断言部分有问题。断言部分 (?!bat|exe$) 表示匹配不以"bat"或"exe"结尾的字符串。然而,在输入字符串"as.batf"中,字符串以"batf"结尾,因此不满足断言条件,导致匹配失败。

要解决这个问题,你可以修改正则表达式,使用正向断言来匹配以"bat"或"exe"结尾之外的字符串。修改后的代码如下:
import re
a = re.search(r".*[.](?!(bat|exe)$).*", "as.batf")
print(a)

这样,正则表达式中的断言部分 (?!(bat|exe)$) 表示匹配不以"bat"或"exe"结尾的字符串。运行代码后,输出结果将会是"as.batf"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-21 20:45:51 | 显示全部楼层
正则表达式问题

问题出在正则表达式的写法上。你的正则表达式 r".*[.](?!bat|exe$).*" 试图匹配一个以任意字符开头,后面跟着一个不以.bat.exe结尾的字符串。但是在你的测试字符串 "as.batf" 中,并没有以.开头的部分,因此无法匹配成功。

修复这个问题的方法是修改正则表达式,使其能够匹配包含.的字符串。下面是修正后的代码:
import rea = re.search(r".*[.](?!bat$|exe$).*", "as.batf")print(a)
修改后的正则表达式为 r".*[.](?!bat$|exe$).*",它会匹配任意字符开头,后面跟着一个不以.bat.exe结尾的字符串,并且要求字符串中包含.。这样就可以正确地匹配到 "as.batf",并输出匹配结果。

希望以上解答能够帮助到你。如有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-21 20:46:09 | 显示全部楼层
根据您提供的代码和示例字符串,正则表达式 .*[.](?!bat|exe$).* 的意图是匹配不以 ".bat" 或 ".exe" 结尾的含有 "." 的字符串。

然而,在你的示例中,字符串 "as.batf" 以 ".bat" 结尾。这与断言 (?!bat|exe$) 不匹配,因此返回的结果是 None。

具体来说,这个正则表达式的解释如下:
· .*:匹配任意数量的字符(除了换行符)。
· [.]:匹配一个点号(注意需要转义成 \.),用于匹配任意字符。
· (?!bat|exe$):前向否定断言,表示后面的内容不应该是 "bat" 或以 "exe" 结尾。
· .*:再次匹配任意数量的字符。

因此,在您的示例中,由于字符串以 ".bat" 结尾,不满足前向否定断言的条件,最终的匹配结果为 None。

如果您希望匹配以 ".bat" 或 ".exe" 结尾的字符串,可以将前向否定断言的逻辑修改为前向肯定断言 (bat|exe$),即:
import re

a = re.search(r".*[.](bat|exe$).*", "as.batf")
print(a)

这样,示例字符串 "as.batf" 就能够匹配成功,并且输出结果为 "as.batf"。

希望这个解答能够帮到您!如果您还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 02:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表