Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式模式中有重叠的重复文本_Python_Regex - Fatal编程技术网

Python 正则表达式模式中有重叠的重复文本

Python 正则表达式模式中有重叠的重复文本,python,regex,Python,Regex,我对regex不熟悉。假设我有这样一个输入: { "tag0": "ABCD", "tag1": "EFGH", "tag2": "IJKL", ... } #tag0#ABCD#####tag1#EFGH###tag2#IJKL## 重复序列类似于#tagx####。标记字段仅包含字母和数字 我想提取这样的标签: { "tag0": "

我对regex不熟悉。假设我有这样一个输入:

{
 "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
仅当值可能没有尾随
#
时才有必要)