加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

与Python中的string.Template相反

发布时间:2020-12-20 11:19:07 所属栏目:Python 来源:网络整理
导读:我知道模板可以像下面这样工作: x = Template(" Coordinates; $o1;$o2;$o3;n")y = x.substitute(o1 = 23,o2 = 108,o3 = 655) 你会给我: " Coordinates; 23;108;655;n" 我想知道是否有办法逆转这个?像我打包的东西解压缩: x = Template(" Coordinates;
我知道模板可以像下面这样工作:

x = Template("  Coordinates;     $o1;$o2;$o3;n")
y = x.substitute(o1 = 23,o2 = 108,o3 = 655)

你会给我:

"  Coordinates;     23;108;655;n"

我想知道是否有办法逆转这个?像我打包的东西解压缩:

x = Template("  Coordinates;     $o1;$o2;$o3;n")
y = "  Coordinates;     23;108;655;n"
z = x.unpack(y)

并让z返回类似的东西:

["23","108","655"]

有任何想法吗?我应该使用正则表达式吗?

编辑:如果使用正则表达式,我将如何编程以下3行返回第一个数字和6个尾随数字?

a = "   123;  Coord   ;  19.1335;   3.5010;  1; 3; 8; 4"
   b = "    17;  Coord   ;  15.2940;  13.5010;  3; 1; 8; 8"
   c = "     5;  Coord   ;  19.1345;   0.6200;  1; 1; 7; 8"

我尝试了这些,似乎无法让它工作:

>>> re.match('(d+);  Coord   ;(d+);(d+);(d+);(d+);(d+);(d+)',a).groups()

解决方案:使用正则表达式tutorial(感谢ironchefpython):

>>> import re
>>> text = """
       123;  Coord   ;  19.1335;   3.5010;  1; 3; 8; 4
        17;  Coord   ;  15.2940;  13.5010;  3; 1; 8; 8
         5;  Coord   ;  19.1345;   0.6200;  1; 1; 7; 8
    """
>>> coord = re.compile("D*(d+)D+([d.]+)D+([d.]+)D+(d+)D+(d+)D+(d+)D+(d+)")
>>> coord.findall(text)
[('123','19.1335','3.5010','1','3','8','4'),('17','15.2940','13.5010','8'),('5','19.1345','0.6200','7','8')]

解决方法

关于你的编辑,如果你想使用正则表达式,我强烈建议你看看 tutorial;没有一些指导,正则表达式看起来像不可压缩的垃圾,即使其他人可以为你编写正则表达式,你至少应该明白他们在做什么.

话虽如此,

>>> re.match(r"D*(d+)D+([d.]+)D+([d.]+)D+(d+)D+(d+)D+(d+)D+(d+)","   123;  Coord   ;  19.1335;   3.5010;  1; 3; 8; 4").groups()
('123','4')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读