REGEX(python)匹配或返回“?”后的字符串,但在新的一行,直到结束,林

2024-04-24 07:34:34 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我要做的。。。我有这样一个字符串:

你知道吗stringparts.bst?(回车) 765945559287EGHC1BG60AA26E4C9CCF8AC425725622F65A6LSA6AHSKCHKSYTTSUATCUAN99(回车) 垃圾邮件/198975/

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

765945559287EGHC1BG60AA26E4C9CCF8AC425725622F65A6LSA6AHSKCHKSYTTSUAN99型

什么正则表达式会起作用?你知道吗

我试过这个,但没用

bst\?(.*)\n

谢谢你在advc


Tags: 字符串垃圾邮件bststringpartsadvc
3条回答

我试过了。假设换行符只有一个字符。你知道吗

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

正则表达式将匹配bst?和第一个换行符之间的所有内容,第一个换行符是nothing。我想你应该把前两条新线的每一条都匹配起来。你知道吗

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

相关问题 更多 >