繁体   English   中英

是否有特定于使用 re.search() 来匹配 function 中的多行模式的内容? Python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM