所以我得到了这个......并打印出预期的内容。我现在需要将打印输出存储到变量中。有关如何清理它的任何指示/想法?
re1='(Tag)' # Word 1
re2='.*?' # Non-greedy match on filler
re3='((?:[a-z][a-z]*[0-9]+[a-z0-9]*))' # Alphanum 1
re4='(.)' # Any Single Character 1
re5='((?:[a-z][a-z]+))' # Word 2
rg = re.compile(re1+re2+re3+re4+re5,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
var1=m.group(1)
alphanum1=m.group(2)
c1=m.group(3)
word1=m.group(4)
print ""+""+alphanum1+""+""+c1+""+""+word1+""+"\n"
答案 0 :(得分:2)
以下是一些可能有用的事情:
re.VERBOSE
标志(与re.X
相同)忽略空格和注释。这样可以更容易地记录您的表达。
(?P<name>expr)
:在{"name": "expr"}
中返回match.groupdict()
。这样可以更轻松地使用结果。
str.format
将接受命名变量,即"{this}".format(this = 5)
您可以使用**dict
运算符将dict解压缩到命名变量。
将这些放在一起,你得到:
reg = re.compile(
"""
(?P<word1>tag) # word1
.*? #
(?P<alphanum>[a-z]+[0-9]+[a-z0-9]*) # alphanum
(?P<ch>.) # ch
(?P<word2>[a-z]{2,}) # word2
""",
re.I | re.S | re.X
)
m = reg.search(txt)
if m:
s = "{alphanum}{ch}{word2}".format(**m.groupdict())
print(s)
答案 1 :(得分:0)
您可以使用StringIO捕获所有输出。
from StringIO import StringIO
backup = sys.stdout
sys.stdout = StringIO()
... your code ...
val = sys.stdout.getvalue()
sys.stdout.close()
sys.stdout = backup
您的输出将在val