【问题标题】:Replace [1-2] in to 1 in Python在 Python 中将 [1-2] 替换为 1
【发布时间】:2015-06-20 17:44:02
【问题描述】:

我想用 1 代替 [1-2],用 3 代替 [3-4],用 7 代替 [7-8][2] 2,以此类推。

例如,我想使用以下字符串:

db[1-2].abc.xyz.pqr.abc.abc.com
db[3-4].abc.xyz.pqr.abc.abc.com
db[1].abc.xyz.pqr.abc.abc.com
xyz-db[1-2].abc.xyz.pqr.abc.abc.com

并将它们转换为

db1.abc.xyz.pqr.abc.abc.com
db3.abc.xyz.pqr.abc.abc.com
db1.abc.xyz.pqr.abc.abc.com
xyz-db1.abc.xyz.pqr.abc.abc.com

【问题讨论】:

  • 你有没有尝试过? Stack Overflow 在这里回答具体问题,而不是为您编写代码。

标签: python regex python-2.7 python-3.x


【解决方案1】:

您可以使用如下正则表达式:

^(.*)\[([0-9]+).*?\](.*)$

并将其替换为:

$1$2$3

这是正则表达式的作用:

^ 匹配字符串的开头
(.*) 匹配任意字符任意次数,也是第一个捕获组
\[ 匹配字符 [ 字面意思
([0-9]+) 匹配任意数字 1 次或多次,也是第二个捕获组
.*? 匹配任何字符任意次数,但尝试找到最小匹配
\] 匹配字符 ] 字面意思
(.* ) 匹配任意字符任意次数
$ 匹配字符串结尾

通过将其替换为$1$2$3,您将其替换为第一个捕获组中的文本,然后是第二个捕获组中的文本,然后是第三个捕获组中的文本。

Here's a live preview regex101.com

【讨论】:

  • 方括号中的* 应该是非贪婪的(或者,您可以将点替换为[^\]])。
  • .*\] 应该是懒惰的
【解决方案2】:
import re

def fixString(strToFix):
    groups = re.match("(.*)\[(\d*).*\](.*)", strToFix).groups()
    return "%s%s%s" % (groups[0], groups[1], groups[2])

【讨论】:

  • 同上。要么使用惰性星,要么将点更改为“除了]”。
  • 一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。正则表达式尤其如此,正则表达式因对大多数人来说是不透明的线噪声而臭名昭著。 (该帖子至少被一位用户标记,大概是因为他们认为应该删除没有解释的答案。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多