我知道python方法中的[re.search(pattns,text)] [1]采用正则表达式模式和字符串,并在字符串中搜索该模式。如果搜索成功,则search()返回匹配对象,否则返回None。
我的问题是,我试图使用OOP(类)实现这个我想返回匹配结果的字符串表示,无论是真还是无 或者任何其他形式的表示(可读)不是这个< __ main __。下面的表达式实例位于0x7f30d0a81440> 是两个示例类:Student和Epression。使用 __ str __(self)__ 的工作正常,但我无法弄清楚如何获得 re.search()的表示功能。 请有人帮助我。
import re
class Expression:
def __init__(self,patterns,text):
self.patterns = patterns
self.text = text
def __bool__(self):
# i want to get a readable representation from here
for pattern in self.patterns:
result = re.search(pattern,self.text)
return result
patterns = ['term1','term2','23','ghghg']
text = 'This is a string with term1 23 not ghghg the other'
reg = Expression(patterns,text)
print(reg)
class Student:
def __init__(self, name):
self.name = name
def __str__(self):
# string representation here works fine
result = self.name
return result
# Usage:
s1 = Student('john')
print(s1)
[1]: https://developers.google.com/edu/python/regular-expressions
答案 0 :(得分:1)
re.search
的输出返回匹配对象。
它会告诉您正则表达式是否与字符串匹配。
您应该识别要从匹配中检索字符串的组,如下所示:
if result:
return result.group(0)
使用上面的代码段替换代码中的return result
。
如果您不确定group
的工作原理,请参阅以下文档中的示例:
>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0) # The entire match
'Isaac Newton'
>>> m.group(1) # The first parenthesized subgroup.
'Isaac'
>>> m.group(2) # The second parenthesized subgroup.
'Newton'
>>> m.group(1, 2) # Multiple arguments give us a tuple.
('Isaac', 'Newton')
答案 1 :(得分:1)
首先,代码中有一个微妙的错误:
def __bool__(self):
for pattern in self.patterns:
result = re.search(pattern,self.text)
return result
当您在第一次迭代结束时返回搜索模式的结果时,其他模式将被忽略。
你可能想要这样的东西:
def __bool__(self):
result = True
for pattern in self.patterns:
result = result or bool(re.search(pattern,self.text))
return result
关于代表,您可以使用.group(0)
。这将返回匹配的字符串,而不是re.Match
obscur表示。
import re
s = re.search(r"ab", "okokabuyuihiab")
print(s.group(0))
# "ab"
当您使用模式列表时,可以使用:
results = [re.search(pattern, seld.text) for pattern in self.patterns]
representation = [r.group(0) for r in results if r else None]