Python 正则表达式匹配但re.match()不';我什么也不退
我尝试使用python中带有正则表达式的特定模式解析.md文件。文件的编写方式如下:Python 正则表达式匹配但re.match()不';我什么也不退,python,regex,python-3.x,Python,Regex,Python 3.x,我尝试使用python中带有正则表达式的特定模式解析.md文件。文件的编写方式如下: ## title ## title 2 ### first paragraph [lines] ... ### second [lines] ... ## third [lines] ... ## last [lines] ... 所以我用这个正则表达式来匹配它: 当我在线尝试时,正则表达式匹配: 但当我在python中使用它时,它不起作用,我不明白为什么 这是我的密码: 这是我的密码: 重新
## title
## title 2
### first paragraph
[lines]
...
### second
[lines]
...
## third
[lines]
...
## last
[lines]
...
所以我用这个正则表达式来匹配它:
当我在线尝试时,正则表达式匹配:
但当我在python中使用它时,它不起作用,我不明白为什么
这是我的密码:
这是我的密码:
重新导入
str=(
r'##(.*)n+##(.*)n+####(\n |.*)##(\n |.*)##(\n |.*)#(\n |.*)#(\n |.*))#(\n |.*))
文件\u regexp=re.compile(str)
##检索文件的内容(我确信这部分
##返回我想要的内容)
m=文件\u regexp.match(文件内容)
#m永远都不是
我已经尝试添加标志,比如re.DOTALL、re.I、re.M、re.S。但是当我这样做的时候,脚本变得非常慢,我的电脑开始发出奇怪的噪音
有人知道我做错了什么吗?如果我错了,请纠正我,如果您只对这些行感兴趣,可以跳过以#开头的行。这可以通过以下方法解决
with open("/path/to/your/file",'r') as in_file:
for line in in_file:
if line.startswith('#'):
continue
else:
do something here.
为什么需要正则表达式?首先,将正则表达式模式分配给一个变量str(覆盖内置的
str
),然后使用featureStr
。结果匹配对象为空,因为您让它忽略匹配的内容。您可以使用?P
为正则表达式占位符指定名称,并在以后访问它们。以下是一个工作示例:
import re
featureStr = (
r'##(?P<title>.*)\n+##(?P<title_2>.*)\n+###(?P<first>(.*)###(?P<second>(.*)##(?P<third>(.*)##(.*)')
file_regexp = re.compile(featureStr, re.S)
fileContent = open("markdown.md").read()
m = file_regexp.match(fileContent)
print(m.groupdict())
我希望这对你有帮助。如果还有任何问题,请告诉我。祝你今天愉快 使用
re.search
而不是re.match
str = (r'##(.*?)\n##(.*?)\n+###(.*?)\n+###(.*?)\n+##(.*?)\n+##(.*?)')
file_regexp = re.compile(str, re.S)
fileContent = '''
## title
## title 2
### first paragraph
[lines]
...
### second
[lines]
...
## third
[lines]
...
## last
[lines]
...
'''
m = file_regexp.search(fileContent)
print(m.groups())
输出:
(' title', ' title 2', ' first paragraph\n[lines]\n...', ' second\n[lines]\n...', ' third \n[lines]\n...', '')
str=(…)
(你在跟踪内置str),还有什么是featureStr?对不起,我刚刚编辑了featureStr的帖子,只是个错误。我保留了括号,因为如果我必须把它写在几行上,就更容易理解正则表达式。(不在每行之间使用\时)如何获取文件内容?文件是UTF8编码的吗?里面有BOM表吗re.search在字符串中的任何位置查找匹配项,
re.match`只在字符串开头查找匹配项,因此BOM可能会阻止正则表达式匹配。我需要以块而不是行的形式处理文本。我在这里用[行]标记的内容。。。必须在单个字符串中检索。切勿使用(\n |.)*
,这是一种非常不凑巧的模式,可能会导致严重减速或崩溃。使用*
并使用re.S
或re.DOTALL
进行编译。谢谢您的建议!我只是想复制他的答案,并为他修改它,以便更容易理解,发生了什么,发生了什么变化。无论如何,谢谢你的评论!但是使用(.|\n)*
是一种非常糟糕的做法,它会导致问题和进一步(重复)的问题。请修复此问题。感谢您的回答,(对于regex占位符,顺便说一句,我不知道),我尝试了您的代码,但问题仍然存在,regex与文件内容不匹配。(所以m仍然没有)您是否尝试过我在回答中使用的m.groupdict()
?你确定你的降价有效吗?你确定你的降价读对了吗?我只是简单地将您的降价示例复制到一个降价文件中,然后执行提供的代码并得到提供的答案。
(' title', ' title 2', ' first paragraph\n[lines]\n...', ' second\n[lines]\n...', ' third \n[lines]\n...', '')