繁体   English   中英

python re.sub如何使用

python re.sub how to use it

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

考虑一个字符串django-1.8.0.dist-info 我希望使用re.sub将其转换为django==1.8.0

我可以使用re.search.format的组合来完成此操作,但我想知道是否可以使用re.sub来实现。

我尝试了这个:

re.sub(r"(?P<name>\\w+)-(?P<version>[\\d\\.]+)", "\\g<name>==\\g<version>", "django-1.8.0.dist-info") ,返回django==1.8.0.dist-info

我希望借此机会学习正则表达式的新知识。

3 个回复
(?P<name>\w+)-(?P<version>[\d\.]+)\..*

使用它,也只需捕获最后一部分即可。

https://regex101.com/r/sJ9gM7/23#python

不确定您是否真的需要使用regexp,但是您可以简单地实现以下目标:

s="django-1.8.0.dist-info"

s=s.replace(".dist-info", "").replace('-','==')    

print(s)    # django==1.8.0  

一个正则表达式可能是:

import re
s="django-1.8.0.dist-info"
s = re.sub(r'^(\w+)-([\d\.]{5})(.+)', r'\1==\2', s)
print(s) # django==1.8.0

表达式分为3组。

  • 第一组是直到-
  • 第二组是5个字符(数字或点)以及版本号
  • 第三组休息

您的正则表达式几乎可以 ,但是您不想替换-您应该使用re.matchre.search

>>> "==".join(re.match(r"(?P<name>\w+)-(?P<version>[\d\.]+)", "django-1.8.0.dist-info").groups())
'django==1.8.0.'

正如@Avinash指出的-还有一个额外的功能. 在末尾

这是修复正则表达式的一种方法(以及使用re.findall的示例):

>>> s = "django-1.8.0.dist-info"
>>> "==".join(*re.findall(r"(\w+)-(\d+(?:\.\d+)*)", s))
'django==1.8.0'

为了(希望)清楚起见,我省略了组名

1 关于python的re.sub

给ab.c ,而 给ab\\\\.c 。 前者给出了我想要但不应该的结果. 像后者一样在正则表达式中逃脱? ...

2 如何使用re.sub

我想修改字符串测试,只剩下“ TEXT”。 因此,删除“ TEXT”之后的所有内容。 我知道了。 但是,如何使用re.sub剪切“ TEXT”之前的所有内容? 我只想使用“ 265”和“ 159”作为确定何时删除的标准。 输出应为“ TEXT” ...

2018-11-14 18:16:30 1 42   python
3 Python:使用re.sub的编码问题

实际上,我正在使用以下代码测试html文件中的一些替换: 不幸的是,我的输出是: 代替"style=" padding:6.00pt 63.36pt 0.00pt 43.68pt; text-align:justify;"" "style=" padding:6.00pt 63 ...

5 Python:re.sub不变

我有以下代码: 在最后一行中,我尝试摆脱仅包含单个空格的行。 真实数据中有很多。 当我将上述代码作为隔离测试运行时,它可以正常工作,但在实际代码中,最后一行根本不执行任何操作! 我尝试过比较使用和不使用它生成的文件-没有区别。 输入示例: 我试图摆脱线条之间的垂直 ...

6 用Python替换(re.sub)

亲爱的,我来自TCL背景,是Python自动化的初学者。 我试图阅读有关python中正则表达式的用法,但与TCL处事方式相比,并没有发现它有所不同。 我遇到一个问题,其中我有一个需要解析的表输出,但是在此之前我需要删除/替换一些我不解析的文本。 我需要从第一行中删除所有文本,直 ...

7 链接re.sub()而不破坏先前的re.sub()-python

我有一个像这样的文件: 我想在字符串的开头删除类似于项目符号的子字符串。 这些项目符号要么用圆括号括起来,以最大3个字母数字字符开头,然后以或结尾. , )或: 。 所需的输出是: 我一直在这样做,但我的正则表达式。 但是我失败了,因为: 使用src = r ...

8 使用re.sub替换

我有条短信。 我想删除某些单词和短语。 一句话是:我们在1990年代[/ b]年代住在那里。 我搜索它找到了吃 。 (=单词[0]) newline = re.sub('ate',newselectionString,line) 但是我只希望它自己找到ate ,而不是 ...

9 Python:re.compile 和 re.sub

问题第 1 部分 我得到了这个文件 f1: 我想重新编译它,它看起来像这样 f1:(带空格) 我试过这段代码,但它有点删除了所有内容: 我的猜测是 re.compile 行,但我不太确定如何处理它。 我不应该使用 3rd 方扩展。 有任何想法吗? 问题第 2 部分 我有一个关于比较 2 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM