繁体   English   中英

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

[英]REGEX (python) match or return a string after '?', but in a new line, til the end of that line

在这里,我们正在尝试做的事情...我有一个字符串结构如下:

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

我需要它来匹配或返回此:

765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchksyttsutcuan99

什么正则表达式可以解决问题?

我已经尝试过了,但是无济于事:(

bst \\?(。*)\\ n

感谢advc

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

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

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

bst\?\n(.*)\n

可以,但是您也可以使用

\n(.*)\n

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

这对于不同种类的换行符更为健壮,如果您有完整的此类字符串列表,则可以使用。 $^代表行的开头和结尾,但不代表实际的换行符(因此为\\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

此模式允许在\\n之前有其他空格:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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