0

这是我想要做的事情......我有一个结构如下的字符串:

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

我需要它来匹配或返回这个:

765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchksytttsutcuan99

什么 RegEx 能解决问题?

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

bst\?(.*)\n

感谢advc

4

4 回答 4

1

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

>>> s
'stringparts.bst?\n765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchks
yttsutcuan99\nSPAM /198975/'
>>> m = re.match('.*bst\?\s(.+)\s', s)
>>> print m.group(1)
765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchksyttsutcuan99
于 2013-04-28T23:52:54.877 回答
0

您的正则表达式将匹配 thebst?和第一个换行符之间的所有内容,这没什么。我认为您想匹配前两个换行符之间的所有内容。

bst\?\n(.*)\n

会工作,但你也可以使用

\n(.*)\n

尽管它可能不适用于其他一些更具体的情况

于 2013-04-28T23:51:27.123 回答
0

这对不同类型的换行符更加健壮,并且如果您有完整的此类字符串列表,则可以使用。$and代表一行的^开始和结束,但不是实际的换行符(因此是\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
于 2013-04-29T00:00:27.213 回答
0

此模式允许在\n:

r'bst\?\s*\n(.*?)\s*\n'

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

r'bst\?\s+(\S+)'
于 2013-04-29T08:31:39.883 回答