我是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/