在子字符串之间打印子字符串

2024-04-26 09:58:28 发布

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

非常普遍的情况下,但我失败了一次又一次试图解决它和建议的解决方案,我发现也有类似的问题。(我认为这个例子对于任何试图从大型代码或结构化文件(如日志)中提取特定信息集的人都是有用的)

  • 示例字符串:

    "123string1abcabcstring2123string3abc123string...nabc"
  • 子串A:"123"

  • 子串B:"abc"

假设我们想找到子串A和子串B之间的所有子串,但不是那些在B和A之间的子串,或者那些在A和B之间但也包含B的子串(“字符串1abc”不应该被打印)

控制台上打印的结果应如下所示:

string 1
string 3
string...n

Tags: 文件字符串代码信息示例string情况解决方案
2条回答

这非常适合正则表达式,特别是re.findall来获得多个匹配:

>>> s="123string 1abcabcstring 2123string 3abc123string...nabc"
>>> import re
>>> re.findall('123(.*?)abc', s)
['string 1', 'string 3', 'string...n']

这将得到一个介于123和abc之间的字符序列。使用.*?而不是.*是很重要的,这样它将匹配尽可能短的字符串,即直到第一次出现“abc”。否则它会匹配到字符串中的最后一个“abc”。你知道吗

re模块是解决此类问题的朋友:

>>> import re
>>> s =  "123string 1abcabcstring 2123string 3abc123string...nabc"
>>> s1 = "123"
>>> s2 = "abc"
>>> m = re.findall(s1+ "(.*?)"+ s2, s)
>>> m
['string 1', 'string 3', 'string...n']

这样你甚至可以在变量中保留分隔字符串。。。你知道吗

当然,如果分隔字符串包含特殊字符,则应该对其进行转义。例如ab(我会写s1 = "ab\("

相关问题 更多 >