我正在操作一些包含数字和字符的字符串。输入字符串是这样的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 演示。输出:
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+
捕获到组 2 之后的一位或多位数字X
,在 lambda 表达式中,交换连接它们的组值_
并附加s
在末尾。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句