如何从 Python 中的多行字符串中提取某些子字符串?

我有一个如下所示的字符串


answer = """

models sold in last 4 weeks

+---------------+

|      pcid     |

+---------------+

|     22bv03    |

|     3eer3d    |

|  fes44h2j555j |

| 4mee33ikj5sq1 |

|  99dkk3bvr32a |

| cv44trmq011sa |

|    lo33xc1a   |

+---------------+***For more information, please visit the company page.

"""

现在我只需table要从字符串中提取,最终结果看起来像


+---------------+

|      pcid     |

+---------------+

|     22bv03    |

|     3eer3d    |

|  fes44h2j555j |

| 4mee33ikj5sq1 |

|  99dkk3bvr32a |

| cv44trmq011sa |

|    lo33xc1a   |

+---------------+

现在我尝试做这样的事情


answer.split("***")[0].split("\n")[1]

但是这样做,我只会得到与预期相反的标题table。


如何确保我只能table从字符串中提取?有什么regex可以在这里应用的吗?


哈士奇WWW
浏览 238回答 3
3回答

回首忆惘然

我可能会尝试:answer = re.sub(r'^.*?(?=\+-)|\*\*\*.*$', '', answer, flags=re.DOTALL)print(answer)这打印:+---------------+|      pcid     |+---------------+|     22bv03    ||     3eer3d    ||  fes44h2j555j || 4mee33ikj5sq1 ||  99dkk3bvr32a || cv44trmq011sa ||    lo33xc1a   |+---------------+正则表达式使用交替来处理在开头和结尾处修剪答案字符串。第一的:^.*?(?=\+-)删除从字符串开头到表格开头(但不包括)的所有内容+-。第二部分:\*\*\*.*$删除从脚注 ( ***) 开始到字符串结尾的所有内容。

白衣非少年

看起来您想从第一次出现的固定分隔符到最后一次出现的相同分隔符进行匹配。在这种情况下,您不必使用正则表达式:sep = '+---------------+'start = answer.find(sep)end = answer.rfind(sep)print(answer[start:end+len(sep)])查看Python演示+---------------+|      pcid     |+---------------+|     22bv03    ||     3eer3d    ||  fes44h2j555j || 4mee33ikj5sq1 ||  99dkk3bvr32a || cv44trmq011sa ||    lo33xc1a   |+---------------+使用正则表达式,您可以直接匹配从第一次出现到最后一次出现的分隔符:import reanswer = """models sold in last 4 weeks+---------------+|      pcid     |+---------------+|     22bv03    ||     3eer3d    ||  fes44h2j555j || 4mee33ikj5sq1 ||  99dkk3bvr32a || cv44trmq011sa ||    lo33xc1a   |+---------------+***For more information, please visit the company page."""sep = '+---------------+'m = re.search(r'(?sm)^{0}.*{0}'.format(re.escape(sep)), answer)if m:    print(m.group())正则表达式详细信息(?sm)- 点现在匹配换行符并^匹配行首^- 一行的开始\+---------------\+ - 分隔符模式.*- 尽可能多的任何 0+ 字符\+---------------\+- 分隔符模式

RISEBY

我尝试如下第 1 步:通过运行以下代码确定索引范围print(answer.index("ks"))  print(answer.index("***"))一旦找到范围,您将找到表 ie 的索引范围[28:226]并注释掉此代码。第2步:print(answer[28:226])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python