Nếu bạn muốn kiểm tra xem một cái gì đó phù hợp với một regex, nếu như vậy, in nhóm đầu tiên, bạn làm ..Thay thế cho `match = re.match(); nếu kết hợp: ... `thành ngữ?
import re
match = re.match("(\d+)g", "123g")
if match is not None:
print match.group(1)
này là hoàn toàn pedantic, nhưng match
biến trung gian là một chút khó chịu ..
Ngôn ngữ như Perl thực hiện điều này bằng cách tạo mới $1
.. $9
biến cho các nhóm phù hợp, giống như ..
if($blah ~= /(\d+)g/){
print $1
}
with re_context.match('^blah', s) as match:
if match:
...
else:
...
đồi khế, đồi tôi nghĩ là một ý tưởng thú vị, vì vậy tôi đã viết một thực hiện đơn giản của nó:
#!/usr/bin/env python2.6
import re
class SRE_Match_Wrapper:
def __init__(self, match):
self.match = match
def __exit__(self, type, value, tb):
pass
def __enter__(self):
return self.match
def __getattr__(self, name):
if name == "__exit__":
return self.__exit__
elif name == "__enter__":
return self.__name__
else:
return getattr(self.match, name)
def rematch(pattern, inp):
matcher = re.compile(pattern)
x = SRE_Match_Wrapper(matcher.match(inp))
return x
return match
if __name__ == '__main__':
# Example:
with rematch("(\d+)g", "123g") as m:
if m:
print(m.group(1))
with rematch("(\d+)g", "123") as m:
if m:
print(m.group(1))
(Chức năng này có thể lý thuyết được vá vào đối tượng _sre.SRE_Match
)
Nó sẽ tốt đẹp nếu bạn có thể bỏ qua việc thực hiện khối mã của câu lệnh with
, nếu không có kết quả phù hợp, điều này sẽ đơn giản hóa việc này thành ..
with rematch("(\d+)g", "123") as m:
print(m.group(1)) # only executed if the match occurred
.. nhưng điều này dường như không thể dựa trên những gì tôi có thể suy ra từ PEP 343
Bất kỳ ý tưởng nào? Như tôi đã nói, đây thực sự là sự phiền toái nhỏ nhặt, gần như đến mức chơi gôn mã ..
"gần như đến thời điểm chơi mã" không đồng ý. Đây hoàn toàn là chơi gôn. Không thể thấy những gì "gây phiền nhiễu" về việc thiết lập một biến đại diện cho thay đổi trạng thái. –
Tôi đã nói rằng tôi đã bị lừa đảo .. – dbr
Thảo luận tương tự đã có trên SO: http://stackoverflow.com/questions/447086/pythons-re-module-saving-state –