正则表达式如何匹配不同段落中的单词

时间:2017-03-30 13:37:33

标签: python regex

它让我疯狂,因为我认为这应该是一个简单的问题:(

在这种情况下,我想创建一个正则表达式,提取下面的文本"这是一个句子"。在这种情况下,它的" 3.43"和" 3.42"例如:

This is a sentence 1023 hello:
3.43

This is a sentence 245 byebye:

3.42

我写了正则表达式:

y = re.compile(r'This is a sentence.*\n(.*)|\n(.*)').search(mytext).groups()

然而,这给了我输出"无"对于pycharm中的两种情况。奇怪的是,regex101表明它能够在两种情况下捕获文本。见下面的链接。

https://regex101.com/r/mYDALr/2/

知道为什么Pycharm中的输出是"无?"

要添加,有没有办法打印" 3.42"或" 3.43"视具体情况而定?我不知道该怎么做,所以我决定使用.groups()。我知道我们可以打印.group(1)或.group(2)但在我的情况下,我不知道第一种情况或第二种情况是否会发生,所以我不知道要打印哪种情况。

任何帮助将不胜感激!

编辑: 我已经使用了提供的解决方案,但现在的问题是,我想在不同的文档中搜索正则表达式字符串,但是例如文件A和文件B的提取文本是不同的编码?见下面的例子。所以正则表达式适用于文件A但不适用于文件B.当我在文件B中打印一行时,它会在你打印(copied_line)时输出奇怪的字符串。

enter image description here

1 个答案:

答案 0 :(得分:1)

>>> test = """This is a sentence 1023 hello:
... 3.43
... 
... This is a sentence 245 byebye:
... 
... 3.42"""
>>> import re
>>> re.findall(r'(?:This is a sentence.*)\n+(.*)', test)
['3.43', '3.42']
>>> re.findall(r'(?:This is a sentence.*)\s+(.*)', test)
['3.43', '3.42']

我建议\s超过\n以获得跨平台线路支持。

相关问题