如何在python中使用正则表达式替换模式?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在python中使用正则表达式替换模式?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2653字,纯文字阅读大概需要4分钟。
内容图文
![如何在python中使用正则表达式替换模式?](/upload/InfoBanner/zyjiaocheng/789/0907d0daaabd4a95bbbc6676d75d1e02.jpg)
我有一个如下所示的数据集:
Male Name=Tony;
Female Name=Alice.1;
Female Name=Alice.2;
Male Name=Ben;
Male Name=Shankar;
Male Name=Bala;
Female Name=Nina;
###
Female Name=Alex.1;
Female Name=Alex.2;
Male Name=James;
Male Name=Graham;
Female Name=Smith;
###
Female Name=Xing;
Female Name=Flora;
Male Name=Steve.1;
Male Name=Steve.2;
Female Name=Zac;
###
我想更改列表,所以它看起来像这样:
Male Name=Class_1;
Female Name=Class_1.1;
Female Name=Class_1.2;
Male Name=Class_1;
Male Name=Class_1;
Male Name=Class_1;
Female Name=Class_1;
###
Female Name=Class_2.1;
Female Name=Class_2.2;
Male Name=Class_2;
Male Name=Class_2;
Female Name=Class_2;
###
Female Name=Class_3;
Female Name=Class_3;
Male Name=Class_3.1;
Male Name=Class_3.2;
Female Name=Class_3;
###
每个名称都必须更改为它们所属的类.
我注意到在数据集中,列表中的每个新类都用’###’表示.
所以我可以通过’###’将数据集拆分成块,并计算###的实例.然后使用正则表达式查找名称,并将其替换为###的计数.
我的代码看起来像这样:
blocks = [b.strip() for b in open('/file', 'r').readlines()]
pattern = r'Name=(.*?)[;/]'
prefix = 'Class_'
triple_hash_count = 1
for line in blocks:
match = re.findall(pattern, line)
print match
for line in blocks:
if line == '###':
triple_hash_count += 1
print line
else:
print(line.replace(match, prefix + str(triple_hash_count)))
这似乎不起作用 – 没有替换.
解决方法:
运行您提供的代码时,我得到以下回溯输出:
print(line.replace(match, prefix + str(triple_hash_count)))
TypeError: Can't convert 'list' object to str implicitly
发生错误是因为type(match)评估为列表.当我在PDB中检查此列表时,它是一个空列表.这是因为匹配已超出范围,有两个for循环.所以让我们把它们结合起来:
for line in blocks:
match = re.findall(pattern, line)
print(match)
if line == '###':
triple_hash_count += 1
print(line)
else:
print(line.replace(match, prefix + str(triple_hash_count)))
现在你在匹配中获得内容,但仍然存在问题:返回类型re.findall是一个字符串列表. str.replace(...)期望单个字符串作为其第一个参数.
您可以作弊,并将违规行更改为print(line.replace(匹配[0],前缀str(triple_hash_count))) – 但这假设您确定要在每个上找到正则表达式匹配不是###的行.一种更有弹性的方法是在尝试调用str.replace()之前检查是否有匹配.
最终代码如下所示:
for line in blocks:
match = re.findall(pattern, line)
print(match)
if line == '###':
triple_hash_count += 1
print(line)
else:
if match:
print(line.replace(match[0], prefix + str(triple_hash_count)))
else:
print(line)
还有两件事:
>在第11行,您误认为变量名称.它是triple_hash_count,而不是hash_count.
>此代码实际上不会更改作为第1行输入提供的文本文件.您需要将line.replace(match,prefix str(triple_hash_count))的结果写回文件,而不仅仅是打印它.
内容总结
以上是互联网集市为您收集整理的如何在python中使用正则表达式替换模式?全部内容,希望文章能够帮你解决如何在python中使用正则表达式替换模式?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。