在这里,我们正在尝试做什么...我有一个像这样的字符串:
stringparts.bst? (回车) 765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchksyttsutcuan99(回车) SPAM / 198975 /
我需要它来匹配或返回:
765945559287eghc1bg60aa26e4c9ccf8ac425725622f65a6lsa6ahskchksyttsutcuan99
RegEx会做什么?
我试过这个,但无济于事(
BST \?(。*)\ n
先谢谢
答案 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+)'