我正在尝试使用包含子域/域分隔符的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)
答案 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