首页 > 解决方案 > python - 正则表达式仅适用于单个单词

问题描述

我正在尝试在另一个文件(日志文件)中搜索和捕获某种类型的文件名(例如/app.css /main.js)。

我构建的正则表达式是这样的:

^\/([a-zA-Z0-9_-]+)[.](css|js)

我正在尝试获取第一个捕获组,即没有扩展名的文件名(app main上面示例中的等),这就是我搜索的方式

haystack = '/main.js'
matches = re.finditer(pattern, haystack, re.MULTILINE)

它工作正常,我能够获得捕获的组。但是,如果我在读取文件时做同样的事情,它就不起作用

pattern = r"'^\/([a-zA-Z0-9_-]+)[.](css|js)'"
for i, line in enumerate(open('log.txt', 'r')):
    haystack = line.rstrip()
    matches = re.finditer(pattern, haystack, re.MULTILINE)

的内容log.txt是这样的:

duis ut diam quam /app.css porttitor
app.css
main.js
purus sit (amet volutpat /main.js)

它在上述文件的任何行中都不匹配,即使它应该在所有四行中都有!

标签: pythonregex

解决方案


将您的正则表达式更改为:

/([a-zA-Z0-9_-]+)\.(css|js)

演示:https ://regex101.com/r/Aub4dw/1/

您不需要线锚的开头。它适用于haystack = '/main.js'因为/main.js正好在字符串的开头。


推荐阅读