python - 有没有一种使用正则表达式反转子字符串的简单方法?

标签 python regex python-3.x substring

我正在处理一些包含数字和字符的字符串。输入字符串有elementX5elementX50等。我知道怎么做 使用以下代码更改它们 elements_10elements_100 等:

import re

inp = ["elementX5asdl", "elementX50al;smd;l", "elementX500laknsd", "elementX5000aknsd"]
for el in inp:
    tmp_usr_str = re.search("elementX50*", el).group()
    tmp_usr_str = re.sub(r"elementX", "elements_", tmp_usr_str)
    tmp_usr_str = re.sub(r"\d+", lambda x: str(2*int(x.group())), tmp_usr_str)
    print(tmp_usr_str)

我想更进一步,将包含数字的子字符串与包含字母的子字符串进行反转,以获得类似:10_elements100_elements 等。

我知道我可以拆分字符串然后再次组合它,但是是否有使用正则表达式的更优雅的方法,可能将命令嵌入到现有的行之一中?

最佳答案

使用捕获组:

import re

inp = ["elementX5asdl", "elementX50al;smd;l", "elementX500laknsd", "elementX5000aknsd"]
for el in inp:
    tmp_usr = re.search("elementX50*", el)
    if tmp_usr:
        tmp_usr_str = tmp_usr.group()
        tmp_usr_str = re.sub(r"(element)X(\d+)", lambda x: "{}_{}s".format(str(2*int(x.group(2))), x.group(1)), tmp_usr_str)
        print(tmp_usr_str)

参见 Python demo .输出:

10_elements
100_elements
1000_elements
10000_elements

详情

  • tmp_usr = re.search("elementX50*", el) - 提取你需要的子串
  • re.sub(r"(element)X(\d+)", lambda x: "{}_{}s".format(str(2*int(x.group(2))), x.group(1)), tmp_usr_str) - 匹配和捕获 element进入组 1 和 \d+X 之后将一位或多位数字捕获到第 2 组中,并在 lambda 表达式内部,交换用 _ 连接它们的组值并附加 s在最后。

关于python - 有没有一种使用正则表达式反转子字符串的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54824659/

相关文章:

python - 出现错误 "error: command ' cl.exe' 失败 : No such file or directory"

python - 如何在Python中按字典键的嵌套列表进行分组

python - Pandas 在哪里过滤将数据类型重置为默认值?

python - 逐年匹配点并将其删除

python - 加速必须遍历整个列表的 Python 代码

python - Win7/Python3.3 : PyLint failed to load its plugins

regex - Perl regex\d+ 和 [0-9] 运算符仅显示字母数字字符串中的单个数字

c - 在 C 中处理 POSIX - 错误消息 : Segmentation Fault (core dumped)

python - 在numpy中返回矩阵邻居总和的最简单方法

python - 从文本中提取年龄值以在 pandas 中创建新列