【问题标题】:What is the most pythonic way to remove characters from a string and create substrings?从字符串中删除字符并创建子字符串的最pythonic方法是什么?
【发布时间】:2023-03-05 03:55:01
【问题描述】:

假设我们有这个字符串:SIC0575(1, 2)

SIC0575length = 7,但它可以动态变化,所以我们假设 length = N

(1, 2) 假设 (0~9, 0~9)

我想从这个字符串创建子字符串。

想要的结果:

val1 = SIC0575

val2 = 1

val3 = 2

我不熟悉 Python,我想知道哪种方式最优雅/最符合 Python 风格。有没有内置函数可以做到这一点?

我尝试过的(它有效,但一点也不优雅):

        data = "SIC0575(1, 2)"
        aux = data.split("(")
        val1 = aux[0]
        aux2 = aux[1].split(",")
        val2 = aux2[0]
        val3 = aux2[1][:-1]

【问题讨论】:

  • 是的,您可以学习基本的regex(正则表达式)并在单个搜索模式中提取三个值。有关所需的学习,请参阅基本包文档。

标签: python


【解决方案1】:

正则表达式是你的朋友:

import re
s = "SIC0575(1, 2)"
val1, val2, val3 = re.fullmatch(r"(.*?)\((\d), (\d)\)", s).groups()

【讨论】:

  • 哇,这太优雅太酷了,感谢您的见解!
【解决方案2】:

对于您的用例,我会选择index

获取左括号(index,取第一片为aux,用astval1val2

import ast

data = "SIC0575(1, 2)"
index = data.find('(')
aux = data[:index]
val1, val2 = ast.literal_eval(data[index:])

输出

print(aux, v1, v2)
SIC0575 1 2

【讨论】:

    【解决方案3】:

    您可以使用正则表达式来匹配字符串。

    import re
    
    data = "SIC0575(1, 2)"
    pattern = re.compile(r'(.*)\(([0-9]), ([0-9])\)')
    val1, val2, val3 = pattern.match(data).groups()
    print(val1, val2, val3)
    

    【讨论】:

      【解决方案4】:

      我会选择类似下面的东西。

      import re
      stringEx = [_.replace(' ','') for _ in re.split('\)|\(|,',"SIC0575(1, 2)")[:-1]]
      var1,var2,var3 = string[0],int(stringEx[1]),int(stringEx[2])
      

      出来

      val1 = SIC0575
      
      val2 = 1
      
      val3 = 2
      

      【讨论】:

      • Python 中有一个名为string 的标准库,因此最好避免将其用作变量名,不过只是一个温和的建议。
      • 嗯,从来没有新的。感谢您提供新信息,刚刚修复它。
      猜你喜欢
      • 2020-12-04
      • 2017-05-19
      • 2017-12-17
      • 2011-05-22
      • 2011-10-03
      • 1970-01-01
      • 2015-08-16
      • 2015-11-11
      • 2019-09-08
      相关资源
      最近更新 更多