python正则表达式在文件中查找编辑和替换

时间:2016-01-07 20:16:35

标签: python regex

我有这个文本的文本文件(bio.txt):

Enter for a chance to {win|earn|gain|obtain|succeed|acquire|get} 
1 - Click {Link|Url|Link up|Site|Web link} Below
2 - Enter Name
3 - Do the submit(inside option {put|have|positioned|set|placed|apply|insert} address)

我有这个python代码:

def spyntax():
    bio_file = open('bio.txt', 'r').readlines()
    _line = ''
    for line in bio_file:
        try:
            matches = re.findall('\{([a-zA-Z| ]+)\}', line)
            for march in matches:
                tmp = random.choice(march.split('|'))
            _line += re.sub('\{([a-zA-Z| ]+)\}', tmp, line)
        except Exception as e:
            print e
    return _line

代码找到这样的文字:

{win|earn|gain|obtain|succeed|acquire|get}  

并替换为随机选择的文本组。 问题是如果在同一行中存在更多带有

的组文本
{text|text} {word1|word2}

然后python不替换正确的{}。如何才能让此代码正确替换所有{}组?

1 个答案:

答案 0 :(得分:0)

您可以将writeLines(c("File not supplied.","Usage: ./program F=filename",[additional text for third line])) 与一个小帮助函数结合起来从结果中选择一个随机字符串并将其用于子:

re.sub()

如果你想要获得更多的最小化,你可以放弃这个功能,只需:

import re
import random

s = "Enter for a chance to {win|earn|gain|obtain|succeed|acquire|get}"

def split_rand(r):
    r = r.group(1)
    return random.choice(r.split('|'))

print re.sub('{(.*?)}', lambda r: split_rand(r), s)

因此,您可以将循环重新编入您的程序:

re.sub('{(.*?)}', lambda r: random.choice(r.group(1).split('|')), s)