本文整理汇总了Python中quodlibet.util.re_escape函数的典型用法代码示例。如果您正苦于以下问题:Python re_escape函数的具体用法?Python re_escape怎么用?Python re_escape使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了re_escape函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: __init__
def __init__(self, pattern):
self.headers = []
self.slashes = len(pattern) - len(pattern.replace(os.path.sep, '')) + 1
self.pattern = None
# patterns look like <tagname> non regexy stuff <tagname> ...
pieces = re.split(r'(<[A-Za-z0-9~_]+>)', pattern)
override = {'<tracknumber>': r'\d\d?', '<discnumber>': r'\d\d??'}
dummies_found = 0
for i, piece in enumerate(pieces):
if not piece:
continue
if piece[0] + piece[-1] == '<>':
piece = piece.lower() # canonicalize to lowercase tag names
if "~" in piece:
dummies_found += 1
piece = "<QUOD_LIBET_DUMMY_%d>" % dummies_found
pieces[i] = '(?P%s%s)' % (piece, override.get(piece, '.+?'))
if "QUOD_LIBET" not in piece:
self.headers.append(piece[1:-1].encode("ascii", "replace"))
else:
pieces[i] = re_escape(piece)
# some slight magic to anchor searches "nicely"
# nicely means if it starts with a <tag>, anchor with a /
# if it ends with a <tag>, anchor with .xxx$
# but if it's a <tagnumber>, don't bother as \d+ is sufficient
# and if it's not a tag, trust the user
if pattern.startswith('<') and not pattern.startswith('<tracknumber>')\
and not pattern.startswith('<discnumber>'):
pieces.insert(0, re_escape(os.path.sep))
if pattern.endswith('>') and not pattern.endswith('<tracknumber>')\
and not pattern.endswith('<discnumber>'):
pieces.append(r'(?:\.[A-Za-z0-9_+]+)$')
self.pattern = re.compile(''.join(pieces))
开发者ID:urielz,项目名称:quodlibet,代码行数:35,代码来源:tagsfrompath.py
示例2: _fixup_literal_list
def _fixup_literal_list(literals, mapping):
u = u"".join(map(unichr, literals))
# longest matches first, we will handle contained ones in the replacement
# function
reg = u"(%s)" % u"|".join(
map(re_escape, sorted(mapping.keys(), key=len, reverse=True)))
def replace_func(match):
text = match.group(1)
all_ = u""
for c in text:
all_ += _fixup_literal(ord(c), False, mapping)
if len(text) > 1:
multi = u"".join(mapping[text])
if len(multi) > 1:
multi = "[%s]" % re_escape(multi)
else:
multi = re_escape(multi)
return "(?:%s|%s)" % (all_, multi)
return all_
new = u""
pos = 0
for match in re.finditer(reg, u):
new += re_escape(u[pos:match.start()])
new += replace_func(match)
pos = match.end()
new += re_escape(u[pos:])
return new
开发者ID:LudoBike,项目名称:quodlibet,代码行数:31,代码来源:parser.py
示例3: _fixup_range
def _fixup_range(start, end, mapping):
extra = []
for i in xrange(start, end + 1):
u = unichr(i)
if u in mapping:
extra.append(re_escape(mapping[u]))
start = re_escape(unichr(start))
end = re_escape(unichr(end))
return u"%s%s-%s" % ("".join(extra), start, end)
开发者ID:urielz,项目名称:quodlibet,代码行数:9,代码来源:_diacritic.py
示例4: replace_func
def replace_func(match):
text = match.group(1)
all_ = u""
for c in text:
all_ += _fixup_literal(ord(c), False, mapping)
if len(text) > 1:
multi = mapping[text]
if len(multi) > 1:
multi = "[%s]" % re_escape(multi)
else:
multi = re_escape(multi)
return "(%s|%s)" % (all_, multi)
return all_
开发者ID:urielz,项目名称:quodlibet,代码行数:13,代码来源:_diacritic.py
示例5: _fixup_literal_list
def _fixup_literal_list(literals, mapping):
u = re_escape("".join(map(unichr, literals)))
if not mapping:
return u
# longest matches first, we will handle contained ones in the replacement
# function
reg = u"(%s)" % u"|".join(
map(re_escape, sorted(mapping.keys(), key=len, reverse=True)))
def replace_func(match):
text = match.group(1)
all_ = u""
for c in text:
all_ += _fixup_literal(ord(c), False, mapping)
if len(text) > 1:
multi = mapping[text]
if len(multi) > 1:
multi = "[%s]" % re_escape(multi)
else:
multi = re_escape(multi)
return "(%s|%s)" % (all_, multi)
return all_
return re.sub(reg, replace_func, u)
开发者ID:urielz,项目名称:quodlibet,代码行数:26,代码来源:_diacritic.py
示例6: Value
def Value(self, outer=False):
"""Rule for value. Either a regexp, quoted string, boolean combination
of values, or free text string"""
if self.accept('/'):
regex = self.expect_re(REGEXP)
self.expect('/')
return self.RegexpMods(regex)
elif self.accept('"'):
regex = self.str_to_re(self.expect_re(DOUBLE_STRING))
self.expect('"')
return self.RegexpMods(regex)
elif self.accept("'"):
regex = self.str_to_re(self.expect_re(SINGLE_STRING))
self.expect("'")
return self.RegexpMods(regex)
elif self.accept('!'):
return self.Negation(self.Value)
elif self.accept('|'):
return self.Union(self.Value)
elif self.accept('&'):
return self.Intersection(self.Value)
else:
if outer:
# Hack to force plain text parsing for top level free text
raise ParseError('Free text not allowed at top level of query')
return match.Regex(re_escape(self.expect_re(TEXT)), u"d")
开发者ID:LudoBike,项目名称:quodlibet,代码行数:27,代码来源:_parser.py
示例7: MatchTag
def MatchTag(self):
tag = self.lookahead.lexeme
self.match(TAG)
try:
return re.compile(re_escape(tag), re.IGNORECASE | re.UNICODE)
except re.error:
raise ParseError("The regular expression was invalid")
开发者ID:mistotebe,项目名称:quodlibet,代码行数:7,代码来源:_parser.py
示例8: str_to_re
def str_to_re(self, string):
"""Convert plain string to escaped regexp that can be compiled"""
if isinstance(string, unicode):
string = string.encode('utf-8')
string = string.decode('string_escape')
string = string.decode('utf-8')
return "^%s$" % re_escape(string)
开发者ID:qwence,项目名称:quodlibet,代码行数:7,代码来源:_parser.py
示例9: _fixup_literal
def _fixup_literal(literal, in_seq, mapping):
u = unichr(literal)
if u in mapping:
u = u + mapping[u]
need_seq = len(u) > 1
u = re_escape(u)
if need_seq and not in_seq:
u = u"[%s]" % u
return u
开发者ID:urielz,项目名称:quodlibet,代码行数:9,代码来源:_diacritic.py
示例10: str_to_re
def str_to_re(self, string):
"""Convert plain string to escaped regexp that can be compiled"""
if isinstance(string, text_type):
string = string.encode('utf-8')
if PY3:
string = codecs.escape_decode(string)[0]
else:
string = string.decode('string_escape')
string = string.decode('utf-8')
return "^%s$" % re_escape(string)
开发者ID:LudoBike,项目名称:quodlibet,代码行数:10,代码来源:_parser.py
示例11: __init__
def __init__(self, string, star=None, dumb_match_diacritics=True):
"""Parses the query string and returns a match object.
star -- List of tags to look in if none are specified in the query.
Defaults to those specified in `STAR`.
dumb_match_diacritics -- In case of text queries (QueryType.TEXT)
try to match variants with diacritic marks.
This parses the query language as well as some tagless shortcuts:
"foo bar" -> &(star1,star2=foo,star1,star2=bar)
"!foo" -> !star1,star2=foo
"&(foo, bar)" -> &(star1,star2=foo, star1,star2=bar)
"&(foo, !bar)" -> &(star1,star2=foo, !star1,star2=bar)
"|(foo, bar)" -> |(star1,star2=foo, star1,star2=bar)
"!&(foo, bar)" -> !&(star1,star2=foo, star1,star2=bar)
"!(foo, bar)" -> !star1,star2=(foo, bar)
etc...
"""
# TODO dumb_match_diacritics
if star is None:
star = self.STAR
if not isinstance(string, text_type):
assert PY2
string = string.decode('utf-8')
self.star = list(star)
self.string = string
self.type = QueryType.VALID
try:
self._match = QueryParser(string, star=star).StartQuery()
return
except self.error:
pass
if not set("#=").intersection(string):
parts = ["/%s/" % re_escape(s) for s in string.split()]
if dumb_match_diacritics:
parts = [p + "d" for p in parts]
string = "&(" + ",".join(parts) + ")"
self.string = string
try:
self.type = QueryType.TEXT
self._match = QueryParser(string, star=star).StartQuery()
return
except self.error:
pass
raise error('Query is not VALID or TEXT')
开发者ID:bernd-wechner,项目名称:quodlibet,代码行数:54,代码来源:_query.py
示例12: __init__
def __init__(self, string, star=None, dumb_match_diacritics=True):
"""Parses the query string and returns a match object.
star -- List of tags to look in if none are specified in the query.
You can add some by extending Query.START and pass it here.
dumb_match_diacritics -- In case of text queries (QueryType.TEXT)
try to match variants with diacritic marks.
This parses the query language as well as some tagless shortcuts:
"foo bar" -> &(star1,star2=foo,star1,star2=bar)
"!foo" -> !star1,star2=foo
"&(foo, bar)" -> &(star1,star2=foo, star1,star2=bar)
"&(foo, !bar)" -> &(star1,star2=foo, !star1,star2=bar)
"|(foo, bar)" -> |(star1,star2=foo, star1,star2=bar)
"!&(foo, bar)" -> !&(star1,star2=foo, star1,star2=bar)
"!(foo, bar)" -> !star1,star2=(foo, bar)
etc...
"""
if star is None:
star = self.STAR
if not isinstance(string, unicode):
string = string.decode('utf-8')
self.star = list(star)
self.string = string
try:
self.type = QueryType.VALID
self._match = QueryParser(QueryLexer(string)).StartStarQuery(star)
return
except error:
pass
# normal string, put it in a intersection to get a value list
if not set("#=").intersection(string):
parts = ["/%s/" % re_escape(s) for s in string.split()]
if dumb_match_diacritics:
parts = [p + "d" for p in parts]
string = "&(" + ",".join(parts) + ")"
self.string = string
try:
self.type = QueryType.TEXT
self._match = QueryParser(
QueryLexer(string)).StartStarQuery(star)
return
except error:
pass
self.type = QueryType.VALID
self._match = QueryParser(QueryLexer(string)).StartQuery()
开发者ID:SimonLarsen,项目名称:quodlibet,代码行数:54,代码来源:_query.py
示例13: __init__
def __init__(self, string, star=None):
"""Parses the query string and returns a match object.
star -- List of tags to look in if none are specified in the query.
Defaults to those specified in `STAR`.
This parses the query language as well as some tagless shortcuts:
"foo bar" -> &(star1,star2=foo,star1,star2=bar)
"!foo" -> !star1,star2=foo
"&(foo, bar)" -> &(star1,star2=foo, star1,star2=bar)
"&(foo, !bar)" -> &(star1,star2=foo, !star1,star2=bar)
"|(foo, bar)" -> |(star1,star2=foo, star1,star2=bar)
"!&(foo, bar)" -> !&(star1,star2=foo, star1,star2=bar)
"!(foo, bar)" -> !star1,star2=(foo, bar)
etc...
"""
print_d("Creating query \"%s\", called from %s"
% (string, frame_info(1)))
if star is None:
star = self.STAR
if not isinstance(string, text_type):
assert PY2
string = string.decode('utf-8')
self.star = list(star)
self.string = string
self.type = QueryType.VALID
try:
self._match = QueryParser(string, star=star).StartQuery()
return
except self.error:
pass
if not set("#=").intersection(string):
parts = ["/%s/d" % re_escape(s) for s in string.split()]
string = "&(" + ",".join(parts) + ")"
self.string = string
try:
self.type = QueryType.TEXT
self._match = QueryParser(string, star=star).StartQuery()
return
except self.error:
pass
# raise error('Query is not VALID or TEXT')
print_d("Query '%s' is invalid" % string)
self.type = QueryType.INVALID
self._match = False_()
开发者ID:LudoBike,项目名称:quodlibet,代码行数:51,代码来源:_query.py
示例14: split_value
def split_value(s, splitters=[u"/", u"&", u","]):
"""Splits a string. The first match in 'splitters' is used as the
separator; subsequent matches are intentionally ignored.
"""
if not splitters:
return [s.strip()]
values = s.split("\n")
for spl in splitters:
spl = re.compile(r"\b\s*%s\s*\b" % re_escape(spl), re.UNICODE)
if not list(filter(spl.search, values)):
continue
return [st.strip() for v in values for st in spl.split(v)]
return values
开发者ID:elfalem,项目名称:quodlibet,代码行数:14,代码来源:splitters.py
示例15: _add_directory
def _add_directory(app, value):
player = app.player
window = app.window
library = app.library
filename = os.path.normpath(os.path.realpath(value))
for added in library.scan([filename]):
pass
if app.browser.can_filter_text():
app.browser.filter_text(
"filename = /^%s/c" % util.re_escape(filename))
else:
basepath = filename + "/"
songs = [song for (fn, song) in library.iteritems()
if fn.startswith(basepath)]
songs.sort(reverse=True)
queue = window.playlist.q
for song in songs:
queue.insert_before(queue.get_iter_first(), row=[song])
player.next()
开发者ID:kriskielce88,项目名称:xn--ls8h,代码行数:19,代码来源:commands.py
示例16: test_many_unsafe
def test_many_unsafe(self):
self.failUnlessEqual(
re_escape("*quux#argh?woo"), r"\*quux\#argh\?woo")
开发者ID:brunob,项目名称:quodlibet,代码行数:3,代码来源:test_util.py
示例17: str_to_re
def str_to_re(self, scanner, string):
if isinstance(string, unicode):
string = string.encode('utf-8')
string = string[1:-1].decode('string_escape')
string = string.decode('utf-8')
return QueryLexeme(RE, "^%s$" % re_escape(string))
开发者ID:mistotebe,项目名称:quodlibet,代码行数:6,代码来源:_parser.py
示例18: test_empty
def test_empty(self):
self.failUnlessEqual(re_escape(""), "")
self.assertTrue(isinstance(re_escape(""), bytes))
开发者ID:brunob,项目名称:quodlibet,代码行数:3,代码来源:test_util.py
示例19: _fixup_not_literal
def _fixup_not_literal(literal, mapping):
u = unichr(literal)
if u in mapping:
u = u + mapping[u]
u = re_escape(u)
return u"[^%s]" % u
开发者ID:urielz,项目名称:quodlibet,代码行数:6,代码来源:_diacritic.py
示例20: test_empty_unicode
def test_empty_unicode(self):
self.failUnlessEqual(re_escape(u""), u"")
self.assertTrue(isinstance(re_escape(u""), unicode))
开发者ID:brunob,项目名称:quodlibet,代码行数:3,代码来源:test_util.py
注:本文中的quodlibet.util.re_escape函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论