【问题标题】:Extracting only characters from a string in Python在 Python 中仅从字符串中提取字符
【发布时间】:2012-01-02 05:15:38
【问题描述】:

在 Python 中,我只想从字符串中提取字符。

考虑我有以下字符串,

input = "{('players',): 24, ('year',): 28, ('money',): 19, ('ipod',): 36, ('case',): 23, ('mini',): 46}"

我想要的结果是,

output =  "players year money ipod case mini"

我尝试仅考虑字母来拆分,

word1 = st.split("[a-zA-Z]+")

但分裂并没有发生。

【问题讨论】:

  • Split 与您尝试做的相反 - 它删除分隔符,并且您已将 [a-zA-Z]+ 指定为分隔符,因此将其删除。
  • 你从哪里得到这种愚蠢的数据格式?
  • 虽然你已经选择了chown的答案,但是看看下面的sbery2A。你从哪里得到这个输入数据。它看起来像一个 python 字典,只是它被引用以使其成为一个字符串。

标签: python regex string


【解决方案1】:

这样做怎么样?

>>> import ast
>>> " ".join([k[0] for k in ast.literal_eval("{('players',): 24, ('year',): 28, ('money',): 19, ('ipod',): 36, ('case',): 23, ('mini',): 46}").keys()])
'case mini year money ipod players'

【讨论】:

  • 为什么会改变键的顺序?它的依据是什么? (不是价值,不是字母...)?
  • 评估字符串以解析它们?昂贵且不安全。
  • 不安全?你明白ast.literal_eval() 是做什么的吗?
  • 这个答案对我来说似乎是最周到的。原始数据是引用的字典。这对我来说有点奇怪。我想知道它是怎么变成这样的。但是,这里的答案处理字典以获取元组的第一个值,即键。如果 OP 描述了数据的来源,那就太好了
【解决方案2】:

你可以用re来做,但是字符串拆分方法不需要正则表达式,它需要一个字符串。

这是使用 re 的一种方法:

import re
word1 = " ".join(re.findall("[a-zA-Z]+", st))

【讨论】:

    【解决方案3】:

    我认为你想要所有的单词,而不是字符。

    result = re.findall(r"(?i)\b[a-z]+\b", subject)
    

    说明:

    "
    \b       # Assert position at a word boundary
    [a-z]    # Match a single character in the range between “a” and “z”
       +        # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
    \b       # Assert position at a word boundary
    "
    

    【讨论】:

    • @julio.alegria 你没看到正则表达式前面的 (?i) 吗?
    • (?i)一无所知,这就是我问的原因:)
    • 这是一个很好的解决方案!
    【解决方案4】:

    string.split() 不接受正则表达式。 你想要这样的东西:

    re.split("[^a-zA-Z]*", "your string")
    

    并得到一个字符串:

    " ".join(re.split("[^a-zA-Z]*", "your string"))
    

    【讨论】:

      【解决方案5】:

      或者如果你想要所有字符,不管单词或空格

          a = "Some57 996S/tr::--!!ing"
          q = ""
          for i in a:
              if i.isalpha():
                  q = "".join([q,i])
      

      打印 q '一些字符串'

      【讨论】:

        【解决方案6】:
        import re
        string = ''.join([i for i in re.findall('[\w +/.]', string) if i.isalpha()])
        
        #'[\w +/.]' -> it will give characters numbers and punctuation, then 'if i.isalpha()' this condition will only get alphabets out of it and then join list to get expected result.
        # It will remove spaces also.
        

        【讨论】:

          【解决方案7】:

          您可以采用遍历字符串的方法,并使用isalpha 函数来确定它是否是字母字符。如果是,您可以将其附加到输出字符串。

          a = "Some57 996S/tr::--!!ing"
          q = ""
          for i in a:
              if i.isalpha():
                  q = "".join([q,i])
          

          【讨论】:

            猜你喜欢
            • 2016-06-01
            • 2021-07-18
            • 1970-01-01
            • 2023-01-07
            • 2022-06-10
            • 2018-11-02
            • 2017-02-09
            • 1970-01-01
            相关资源
            最近更新 更多