我正在处理一些包含数字和字符的字符串。输入字符串有elementX5
、elementX50
等。我知道怎么做
使用以下代码更改它们 elements_10
、elements_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_elements
、100_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/