Python 正则表达式模式中有重叠的重复文本
我对regex不熟悉。假设我有这样一个输入:Python 正则表达式模式中有重叠的重复文本,python,regex,Python,Regex,我对regex不熟悉。假设我有这样一个输入: { "tag0": "ABCD", "tag1": "EFGH", "tag2": "IJKL", ... } #tag0#ABCD#####tag1#EFGH###tag2#IJKL## 重复序列类似于#tagx####。标记字段仅包含字母和数字 我想提取这样的标签: { "tag0": "
{
"tag0": "ABCD",
"tag1": "EFGH",
"tag2": "IJKL",
...
}
#tag0#ABCD#####tag1#EFGH###tag2#IJKL##
重复序列类似于#tagx####
。标记字段仅包含字母和数字
我想提取这样的标签:
{
"tag0": "ABCD",
"tag1": "EFGH",
"tag2": "IJKL",
...
}
我尝试了类似于
#[a-zA-Z0-9]*#(.*)##
的方法,但它提供了除第一个标记之外的所有数据。您可以在此处使用正则表达式和非正则表达式方法:
import re
s = "#tag0#ABCD###tag1#EFGH###tag2#IJKL##"
print ( dict(re.findall(r'#([^#]+)#(.*?)(?:##|\Z)', s)) )
# => {'tag0': 'ABCD', 'tag1': 'EFGH', 'tag2': 'IJKL'}
print ( dict([(x.split('#')[0],x.split('#')[-1]) for x in s.strip('#').split('###')]) )
# => {'tag0': 'ABCD', 'tag1': 'EFGH', 'tag2': 'IJKL'}
见
#([^#]+)#(.*)(=##|\Z)
正则表达式匹配:
-a
字符
-捕获组1:一个或多个字符,而不是([^#]+)
-a
字符
-捕获组2:任何字符,0或更多,尽可能少(.*)
-直到第一次出现(?:##|\Z)
或字符串结尾##
#
,请删除|\Z
。看
非regex的非regex方法意味着非regex方法的非regex方法意味着剥离两个字符串两端的#
的<非regex方法的非regex方法意味着剥离#
/p>#|\Z)、s))(|\Z
仅当值可能没有尾随#
时才有必要)