本文整理匯總了Python中sre_parse.SubPattern方法的典型用法代碼示例。如果您正苦於以下問題:Python sre_parse.SubPattern方法的具體用法?Python sre_parse.SubPattern怎麽用?Python sre_parse.SubPattern使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類sre_parse
的用法示例。
在下文中一共展示了sre_parse.SubPattern方法的9個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: sub_values
# 需要導入模塊: import sre_parse [as 別名]
# 或者: from sre_parse import SubPattern [as 別名]
def sub_values(self, parsed):
"""This knows how to convert one piece of parsed pattern."""
# If this is a subpattern object, we just want its data
if isinstance(parsed, sre_parse.SubPattern):
parsed = parsed.data
# A list indicates sequential elements of a string
if isinstance(parsed, list):
elements = [self.sub_values(p) for p in parsed]
return CombinatoricsSequence(*elements)
# If not a list, a tuple represents a specific match type
if isinstance(parsed, tuple) and parsed:
matcher, arguments = parsed
if not isinstance(arguments, tuple):
arguments = (arguments,)
if matcher in self.backends:
return self.backends[matcher](*arguments)
# No idea what to do here
raise ParseError(repr(parsed))
示例2: __init__
# 需要導入模塊: import sre_parse [as 別名]
# 或者: from sre_parse import SubPattern [as 別名]
def __init__(self, lexicon, flags=0):
from sre_constants import BRANCH, SUBPATTERN
if isinstance(flags, RegexFlag):
flags = flags.value
self.lexicon = lexicon
# combine phrases into a compound pattern
p = []
s = sre_parse.Pattern()
s.flags = flags
for phrase, action in lexicon:
gid = s.opengroup()
p.append(sre_parse.SubPattern(s, [
(SUBPATTERN, (gid, 0, 0, sre_parse.parse(phrase, flags))),
]))
s.closegroup(gid, p[-1])
p = sre_parse.SubPattern(s, [(BRANCH, (None, p))])
self.scanner = sre_compile.compile(p)
示例3: sub_values
# 需要導入模塊: import sre_parse [as 別名]
# 或者: from sre_parse import SubPattern [as 別名]
def sub_values(self, parsed):
"""This knows how to convert one piece of parsed pattern."""
# If this is a subpattern object, we just want its data
if isinstance(parsed, sre_parse.SubPattern):
parsed = parsed.data
# A list indicates sequential elements of a string
if isinstance(parsed, list):
elements = [self.sub_values(p) for p in parsed]
return CombinatoricsSequence(*elements)
# If not a list, a tuple represents a specific match type
if isinstance(parsed, tuple) and parsed:
matcher, arguments = parsed
if not isinstance(arguments, tuple):
arguments = (arguments,)
if matcher in self.backends:
if not self.relaxed:
self.check_anchor_state(matcher, arguments)
return self.backends[matcher](*arguments)
# No idea what to do here
raise ParseError(repr(parsed)) # pragma: no cover
示例4: __init__
# 需要導入模塊: import sre_parse [as 別名]
# 或者: from sre_parse import SubPattern [as 別名]
def __init__(self, lexicon, flags=0):
from sre_constants import BRANCH, SUBPATTERN
self.lexicon = lexicon
# combine phrases into a compound pattern
p = []
s = sre_parse.Pattern()
s.flags = flags
for phrase, action in lexicon:
p.append(sre_parse.SubPattern(s, [
(SUBPATTERN, (len(p)+1, sre_parse.parse(phrase, flags))),
]))
s.groups = len(p)+1
p = sre_parse.SubPattern(s, [(BRANCH, (None, p))])
self.scanner = sre_compile.compile(p)
示例5: _compile
# 需要導入模塊: import sre_parse [as 別名]
# 或者: from sre_parse import SubPattern [as 別名]
def _compile(regexp):
parsed = sre_parse.parse(regexp)
parsed = _remove_group_identifiers(parsed)
# Add grouping parentheses around the regexp; this will allow
# us to access the material that was split on.
# Need to set the Pattern to expect a single group
pattern = sre_parse.Pattern()
pattern.groups += 1
grouped = sre_parse.SubPattern(pattern)
grouped.append((sre_constants.SUBPATTERN, (1, parsed)))
return sre_compile.compile(grouped, re.UNICODE | re.MULTILINE | re.DOTALL)
示例6: __init__
# 需要導入模塊: import sre_parse [as 別名]
# 或者: from sre_parse import SubPattern [as 別名]
def __init__(self, lexicon, flags=0):
from sre_constants import BRANCH, SUBPATTERN
self.lexicon = lexicon
# combine phrases into a compound pattern
p = []
s = sre_parse.Pattern()
s.flags = flags
for phrase, action in lexicon:
gid = s.opengroup()
p.append(sre_parse.SubPattern(s, [
(SUBPATTERN, (gid, sre_parse.parse(phrase, flags))),
]))
s.closegroup(gid, p[-1])
p = sre_parse.SubPattern(s, [(BRANCH, (None, p))])
self.scanner = sre_compile.compile(p)
示例7: __init__
# 需要導入模塊: import sre_parse [as 別名]
# 或者: from sre_parse import SubPattern [as 別名]
def __init__(self, lexicon, flags=0):
from sre_constants import BRANCH, SUBPATTERN
self.lexicon = lexicon
# combine phrases into a compound pattern
p = []
s = sre_parse.Pattern()
s.flags = flags
for phrase, action in lexicon:
p.append(sre_parse.SubPattern(s, [
(SUBPATTERN, (len(p)+1, sre_parse.parse(phrase, flags))),
]))
s.groups = len(p)+1
p = sre_parse.SubPattern(s, [(BRANCH, (None, p))])
self.scanner = sre_compile.compile(p)
示例8: build_op_tree
# 需要導入模塊: import sre_parse [as 別名]
# 或者: from sre_parse import SubPattern [as 別名]
def build_op_tree(node, subpattern):
for op, av in subpattern.data:
args = []
subpatterns = []
if op is sre_constants.BRANCH:
for a in av[1]:
subpatterns.append(a)
elif op is sre_constants.GROUPREF_EXISTS:
condgroup, item_yes, item_no = av
subpatterns.append(item_yes)
if item_no:
subpatterns.append(item_no)
elif isinstance(av, (tuple, list)):
for a in av:
if isinstance(a, sre_parse.SubPattern):
subpatterns.append(a)
else:
args.append(a)
else:
args.append(av)
new_node = OpNode(op, tuple(args))
for sp in subpatterns:
build_op_tree(new_node, sp)
node.children.append(new_node)
示例9: _remove_group_identifiers
# 需要導入模塊: import sre_parse [as 別名]
# 或者: from sre_parse import SubPattern [as 別名]
def _remove_group_identifiers(parsed_re):
"""
Modifies the given parsed regular expression, replacing all groupings
(as indicated by parenthesis in the regular expression string) with
non-grouping variants (indicated with '(?:...)'). This works on the
output of sre_parse.parse, modifing the group indentifier in
SUBPATTERN structures to None.
@param parsed_re: the output of sre_parse.parse(string)
@type parsed_re: C{SubPattern}
"""
if isinstance(parsed_re, sre_parse.SubPattern):
# If it's a SubPattern, replace each item with its processed
# equivalent. These classes are mutable, so that in-place
# modification is allowed.
for i in range(len(parsed_re)):
parsed_re[i] = _remove_group_identifiers(parsed_re[i])
return parsed_re
elif isinstance(parsed_re, list) or isinstance(parsed_re, tuple):
# Otherwise, if it's a sequence, check for the tell-tale
# SUBPATTERN item and repair the sub item if needed
to_process = list(parsed_re)
if to_process[0] == sre_constants.SUBPATTERN:
# replace next int with None
sub_item = list(to_process[1])
sub_item[0] = None
to_process[1] = tuple(sub_item)
# Process each item, in the case of nested SUBPATTERNS
processed = map(_remove_group_identifiers, to_process)
# Coerce back into the original type
if isinstance(parsed_re, list):
return processed
else:
return tuple(processed)
else:
# Don't need to do anything to other types
return parsed_re
# Replace any grouping parentheses with non-grouping ones. We
# need to do this, because the list returned by re.sub will
# contain an element corresponding to every set of grouping
# parentheses. We must not touch escaped parentheses, and
# need to handle the case of escaped escapes (e.g. "\\(").
# We also need to handle nested parentheses, which means our
# regexp contexts must be zero-width. There are also issues with
# parenthesis appearing in bracketed contexts, hence we've
# operated on the intermediate parse structure from sre_parse.