Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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,假设我们有以下正则表达式: [ABC]{1,3}.{0,2}[DEFG].{2,3}V 如果与以下字符串匹配,我们可以使用Python的re模块进行测试: AXDXXV 它确实相配。然后,使用Python,我们如何检索与字符串的每个部分匹配的正则表达式的每个部分 例如,以下输出列表将起作用: [ '[ABC]{1,3}', '.{0,2}', '[DEFG]', '.{2,3}', 'V' ] 您可以使用命名捕获组,在获得匹配后,您将能够获得映射到这些名称的值(使用)。我还建议动态构建这样

假设我们有以下正则表达式:

[ABC]{1,3}.{0,2}[DEFG].{2,3}V
如果与以下字符串匹配,我们可以使用Python的
re
模块进行测试:

AXDXXV
它确实相配。然后,使用Python,我们如何检索与字符串的每个部分匹配的正则表达式的每个部分

例如,以下输出列表将起作用:

[ '[ABC]{1,3}', '.{0,2}', '[DEFG]', '.{2,3}', 'V' ]
您可以使用命名捕获组,在获得匹配后,您将能够获得映射到这些名称的值(使用)。我还建议动态构建这样一个模式,作为一个有序的ICT

见a:

import-re,集合
#使用命名的捕获组定义模式部件
部分=[('p1',r'(?P[ABC]{1,3})],
('p2',r'('P.{0,2}'),
('p3',r'(?P[DEFG])),
('p4',r'('P.{2,3}'),
('p5',r'(?PV))]
#创建并初始化OrderedDict
pod=集合。订购信息(零件)
#从值构建模式(在Python3中,使用list(pod.items()))
reg=”“.加入([v代表k,v代表pod.items()]))
测试\u str=“axdxv”
#找到匹配的
m=重新搜索(注册,测试)
如果m:
#如果找到匹配项,则获取groupdict()
m_dict=m.groupdict()
打印(m_dict)
打印(“{}=>{}”。格式(m.group(“p1”),pod[“p1”]))
正则表达式看起来像
(?p[ABC]{1,3})(?p.{0,2})(?p[DEFG])(?p.{2,3})(?PV)
,一旦找到匹配项,就会得到如下结果
{'p2':'X','p3':'D','p1':'A','p4':'XX','v':'v'}
。然后,您可以始终使用
“{}=>{}”值检查底层模式。format(m.group(“p1”),pod[“p1”])
(例如
a=>(?P[ABC]{1,3})
)。

用捕获组包装每个部分-我认为不支持这种级别的内省,您需要更改(添加一些捕获组)你平常的表情谢谢你的威克托·斯特里布。这是可行的,但前提是可以提前定义模式部分。在这些部件与字符串匹配后,是否可以自动识别它们?例如,这里第一个“A”将被正则表达式的这一部分识别:
[ABC]{1,3}
,那么我们如何获得以
[ABC]{1,3}
作为第一个元素的输出列表呢?除了解析模式之外,没有其他方法。
import re, collections

# Define the pattern parts with named capturing groups
parts = [('p1', r'(?P<p1>[ABC]{1,3})'),
    ('p2', r'(?P<p2>.{0,2})'),
    ('p3', r'(?P<p3>[DEFG])'),
    ('p4', r'(?P<p4>.{2,3})'),
    ('p5', r'(?P<v>V)')]
# Create and init the OrderedDict
pod = collections.OrderedDict(parts)
# Build the pattern from values (in Python 3, use list(pod.items()) )
reg = "".join([v for k,v in pod.items()])
test_str = "AXDXXV"
# Find a match
m = re.search(reg, test_str)
if m:
    # If a match is found, get the groupdict()
    m_dict = m.groupdict()
    print(m_dict)
    print("{} => {}".format(m.group("p1"), pod["p1"]))