Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式匹配但re.match()不';我什么也不退_Python_Regex_Python 3.x - Fatal编程技术网

Python 正则表达式匹配但re.match()不';我什么也不退

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中使用它时,它不起作用,我不明白为什么 这是我的密码: 这是我的密码: 重新

我尝试使用python中带有正则表达式的特定模式解析.md文件。文件的编写方式如下:

## 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...', '')