【问题标题】:Values between repeating string parts重复字符串部分之间的值
【发布时间】:2016-04-29 21:06:20
【问题描述】:

假设我们有一个字符串aa 的一部分看起来像 ac5:9qr$28c#。 这种模式 (value1:value2$value3#) 重复。

现在,我的问题是:如何查找这些值并提取它们?

注意:这些字符串部分不一定是特殊字符。

【问题讨论】:

  • 分隔符是否总是以:$# 的顺序排列?值是否总是三个字符长?
  • 是和不是。总是 value:value$value#value:value$value#...:$# 是这里唯一重复的东西,值的长度总是不同的。
  • 使用带有re.findall的正则表达式。

标签: python python-2.7 python-2.x


【解决方案1】:

re.findall 可以很好地解决这个问题。

试试这个:

import re

data = 'abc:def$ghi#ac5:9qr$28c#1234:4567$89#'
result = re.findall(r'(.*?):(.*?)\$(.*?)#', data)
print result

结果:

[('abc', 'def', 'ghi'), ('ac5', '9qr', '28c'), ('1234', '4567', '89')]

【讨论】:

  • “拆分器”可以多字符吗?如#$
  • 是的。例如:r'(.*?):!(.*?)\$@(.*?)##' 将匹配字符串 'abc:!def$@ghi##'
【解决方案2】:

应该这样做:

a = "ac5:9qr$28c#"

values = []
delimiters = [':','$','#']

while len(a) > 0:
    for delimiter in delimiters: 
        delimiterIndex = a.index(delimiter )
        newValue = a[0:delimiterIndex]
        values.append(newValue)
        a = a[delimiterIndex+1:]

print values

输出是:

['ac5', '9qr', '28c']

当然你可以实现类似的东西来保留原来的'a'字符串。

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多