REGEX(python)在'?'之后匹配或返回一个字符串,但是在一个新行中,直到该行的结尾

时间:2013-04-28 23:35:11

标签: python regex

在这里,我们正在尝试做什么...我有一个像这样的字符串:

stringparts.bst? (回车) 765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchksyttsutcuan99(回车) SPAM / 198975 /

我需要它来匹配或返回:

765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchksyttsutcuan99

RegEx会做什么?

我试过这个,但无济于事(

BST \?(。*)\ n

先谢谢

4 个答案:

答案 0 :(得分:1)

我试过这个。假设换行符只有一个字符。

>>> s
'stringparts.bst?\n765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchks
yttsutcuan99\nSPAM /198975/'
>>> m = re.match('.*bst\?\s(.+)\s', s)
>>> print m.group(1)
765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchksyttsutcuan99

答案 1 :(得分:0)

你的正则表达式将匹配bst?和第一个换行符之间的所有内容。我想你想要匹配前两个换行符之间的所有内容。

bst\?\n(.*)\n

可以使用,但您也可以使用

\n(.*)\n

虽然它可能不适用于其他一些更具体的案例

答案 2 :(得分:0)

这对于不同类型的换行符更加强大,并且如果您有完整的此类字符串列表,则可以正常工作。 $^表示一行的开头和结尾,但不是实际的换行符(因此是\s+序列)。

import re

BST_RE = re.compile(
    r"bst\?.*$\s+^(.*)$",
    re.MULTILINE
)

INPUT_STR = r"""
stringparts.bst?
765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchksyttsutcuan99
SPAM /198975/

stringparts.bst?
another
SPAM /.../
"""

occurrences = BST_RE.findall(INPUT_STR)

for occurrence in occurrences:
    print occurrence

答案 3 :(得分:0)

此模式允许在\n

之前添加额外的空格
r'bst\?\s*\n(.*?)\s*\n'

如果您不希望捕获字符串中的任何空格,则可以使用更简单的空格,其中\s+占用空白,包括\n(\S+)捕获所有空格连续的非空格:

r'bst\?\s+(\S+)'