Python - 用句点替换括号并删除第一个和最后一个句点

时间:2015-09-30 12:12:15

标签: python regex

我正在尝试使用包含子域/域分隔符的DNS查找列表的输入文件,其中字符串长度在括号中而不是句点。它看起来像这样:

(8)subdomain(5)domain(3)com(0)
(8)subdomain(5)domain(3)com(0)
(8)subdomain(5)domain(3)com(0)

我想用句点替换括号和数字,然后删除第一个和最后一个句点。我的代码目前正在执行此操作,但最后一段时间。任何帮助表示赞赏。这是代码:

import re

file = open('test.txt', 'rb')
writer = open('outfile.txt', 'wb')


for line in file:
    newline1 = re.sub(r"\(\d+\)",".",line)  
    if newline1.startswith('.'):
        newline1 = newline1[1:-1]   

    writer.write(newline1)

4 个答案:

答案 0 :(得分:4)

您可以使用\(\d+\)正则表达式拆分行,然后使用.两端的逗号逗号加入:

for line in file:
    res =".".join(re.split(r'\(\d+\)', line))
    writer.write(res.strip('.'))

请参阅IDEONE demo

答案 1 :(得分:3)

鉴于您的re.sub来电是这样的:

> re.sub(r"\(\d+\)",".", "(8)subdomain(5)domain(3)com(0)")
'.subdomain.domain.com.'

您唯一需要做的就是从任何前导和尾随.中删除生成的字符串:

> s = re.sub(r"\(\d+\)",".", "(8)subdomain(5)domain(3)com(0)")
> s.strip(".")
'subdomain.domain.com'

完全解决方案:

for line in file:
    newline1 = re.sub(r"\(\d+\)",".",line).strip(".")
    writer.write(newline1)

答案 2 :(得分:1)

import re
def repl(matchobj):
    if matchobj.group(1):
        return "."
    else:
        return ""



x="(8)subdomain(5)domain(3)com(0)"
print re.sub(r"^\(\d+\)|((?<!^)\(\d+\))(?!$)|\(\d+\)$",repl,x)

输出:subdomain.domain.com

您可以定义自己的replace功能。

答案 3 :(得分:0)

WORD