[英]Is there something specific for using re.search() to match multiline pattern within a function? Python
我正在尝试搜索r'CONTENTS\.\n+CHAPTER I\.'
在Gutenberg project 的字符串中,但我得到AttributeError
,因为它不匹配,但相同的模式在 function 之外确实匹配。我的代码如下:
def gutenberg(url):
responce=request.urlopen(url)
raw=responce.read().decode('utf8')
print(re.search(r"CONTENTS\.\n+CHAPTER I\.",raw).group())
a=gutenberg("https://www.gutenberg.org/files/76/76-0.txt")
Output:
...
print(re.search(r"CONTENTS\.\n+CHAPTER I\.",raw).group())
AttributeError: 'NoneType' object has no attribute 'group'
在 function 之外:
a="""Complete
CONTENTS.
CHAPTER I. Civilizing"""
re.search(r"CONTENTS\.\n+CHAPTER I\.",a).group()
Output:
'CONTENTS.\n\nCHAPTER I.'
但是,当模式中没有换行符时,它在 function 中工作正常: print(re.search(r"CONTENTS\.",raw).group())
。 所以,我相信我需要像flags
这样的东西。
我试过的:
print(re.search(r"CONTENTS\.\n+CHAPTER I\.",raw,re.M).group())
pattern=re.compile(r'CONTENTS.\n+CHAPTER I.')
print(pattern.search(raw).group())
我什至尝试在我的模式中添加一个反斜杠: r"CONTENTS\.\\n+CHAPTER I\."
- 相同的AttributeError
。
我在这里读到了flags=regex.VERSION1
但我在上一个 Python's regex guide中找不到关于它的信息,所以我没有尝试使用它。
任何想法如何在 function 中搜索多行模式?
总的来说,让我感到困惑的是 function 内外 re.search() 的不同行为。有没有我不知道的概念?
提前致谢! 我会很感激任何帮助!
不,没有什么特别的,你是否“在一个函数中”并不重要。 您从 URL 中提取的数据根本不符合您的模式:它有\r\n
行结尾而不是\n
。 您的带有文字字符串的“函数外部”测试用例正在测试与模式匹配的不同数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.