python - 在Python中提取多个子字符串时声明停止位置

标签 python arrays string parsing substring

我是Python新手,正在尝试解析一个长文本字符串以获取两个精确模式之间的子字符串。问题在于告诉 python 在第一次出现结束模式时停止。我还需要收集子字符串的所有实例,将它们放入数组存储中以供稍后使用。我正在尝试利用(重新)模块示例 here为了简单起见,由 Nikolaus Gradwohl 编写。下面是我所做的一个例子。

import re
string='valuepattern1":"capture",abcdpattern1":"capture2",defg'
result = re.search('pattern1":"(.*)",', string)
print result.group(1)

Output: capture",abcdpattern1":"capture2"

这里我试图收集在设置的起始点(pattern1":")和捕获后的直接结束点(",)之间的字符串中找到的每个捕获实例(capture和capture2)。收集的每个实例都需要添加到数组中,如下所示。

print result
Output: [capture,capture2]

请注意,捕获没有固定的长度,并且在整个字符串中各不相同,但是,开始和结束模式在整个字符串中保持一致。

预先感谢您就此事提供的任何帮助。

最佳答案

您需要更改模式,以便捕获组中的 . 与右引号不匹配。我可以看到两种合理的方法:

首先,您可以使用非贪婪通配符:pattern1":"(.*?)"*? 告诉它匹配尽可能小的数字字符数,而不是最大可能数量。

第二个选项是使用字符类从模式的捕获部分中排除引号:pattern1":"([^"]*)" 使用 ^ 作为括号中的第一个字符告诉它排除其余字符,因此 [^"] 是任何非引号字符。

关于python - 在Python中提取多个子字符串时声明停止位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36609313/

相关文章:

javascript - 在 JavaScript 中连接字符串的最有效方法是什么?

vb.net - String.Contains(Array?..) - VB.NET 中的坏词过滤器

php - 为什么 PHP strlen() 返回负长度?

python - 在 Facebook 上获取公共(public)页面的帖子

java - addCountry 空指针错误

c# - 对 rtfbox 和文本文件中的字符串数组进行排序/排序

java - 如何在 Java 中创建类型安全的泛型数组?

python - 限制对仅拥有的内容 django 的访问

python - 在 pandas python 中按列计算匹配部分字符串的出现次数

python - 如何在元组中单独添加元素?