【问题标题】:Split list and print desired output拆分列表并打印所需的输出
【发布时间】:2015-05-30 09:11:39
【问题描述】:
import re

foo='''"a","b","c","aaa":"sdlfjlasjdfljas"'''

list=re.split('\:,\';\"',foo)
i = 0
for word in list:
    newWord = word
    newWord.split(':')

我目前正在尝试使用逗号、冒号和括号等不同的参数将字符串 foo 分开......等等。

我目前能够将字符串拆分一次,从而将字符串 "aaa":"alsjflajlsdjf" 全部放在一个索引中。我希望能够用冒号将其拆分,并在 if 语句中使用 word.find 找到 aaa 以获取下一个字符串并将其打印出来。所以它会打印出乱码。

我已成功使用 for 循环找到 aaa 部分,但我无法打印出乱码。提前感谢您的帮助。

【问题讨论】:

  • 您的代码的问题是split() 不会“就地”修改字符串(什么都不会:字符串在 python 中是“不可变的”)。您需要将结果保存在新变量中,例如newWord = word.split(':')。然后您就可以继续编写代码了。
  • 附言。 list 是 python 中列表类型的名称。不要将它用作变量名,它是合法的,但它会比你想象的更快地咬你。
  • 如果你只想要aaa之后的第一个词,为什么要拆分? .find 也是一个 str 操作,那么拆分和使用 find 究竟如何让您找到乱码?
  • 如何从 sdlfjlasjdfljas 获得 alsjflajlsdjf?

标签: python list parsing text split


【解决方案1】:

您可以简单地根据无字字符 (\W) 拆分字符串:

>>> foo='''"a","b","c","aaa":"sdlfjlasjdfljas"'''
>>> 
>>> re.split(r'\W',foo)
['', 'a', '', '', 'b', '', '', 'c', '', '', 'aaa', '', '', 'sdlfjlasjdfljas', '']

或者对于空字符串的拒绝,您可以使用re.findall 查找仅包含单词字符的单词(\w):

>>> l=re.findall(r'\w+',foo)
['a', 'b', 'c', 'aaa', 'sdlfjlasjdfljas']

您可以在next 函数中使用生成器表达式获取长度大于一个的第一个单词:

>>> next(w for w in l if len(w)>1)
'aaa'

或者使用列表推导来获取所有这些:

>>> [w for w in l if len(w)>1]
['aaa', 'sdlfjlasjdfljas']

注意:如果你想用正则表达式分割一个字符串,你可以使用以下方法:

  • 使用字符类:[:,.;]
  • 使用逻辑或:':|,|\.|;'

但是在re.split 中使用 pip ('|') 可能会包含空字符串。在这种情况下,您可以使用字符类。

【讨论】:

  • 我无法理解您是如何准确地找到 aaa 部分,然后打印出之后的内容。我试着做你对 w for w...len(w)>1 所做的事情,但我只是打印了整个列表,因为我的数据文件中有更多 4 个条目。我将如何打印出 aaa 之后的索引或然而
【解决方案2】:

你的正则表达式应该是这样的:

[,;:]

方括号包括您要分割的所有字符。

【讨论】:

    【解决方案3】:

    您可以使用str.translate 将要拆分的任何字符替换为逗号,然后拆分为逗号:

    tbl= str.maketrans({ord(ch):"," for ch in "();:"})
    print("\n".join(foo.translate(tbl).split(",")))
    
    "a"
    "b"
    "c"
    "aaa"
    "sdlfjlasjdfljas"
    

    如果你想要的只是aaa 之后的单词,我不明白你为什么要分割所有单词,如果你分割字符串,str.find 不会为你做太多,你可以从那里分割使用find获取aaa的索引后获取下一个单词。

    ind = foo.index("aaa")
    if ind != -1:
        ....
    

    【讨论】:

      猜你喜欢
      • 2021-02-01
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多