【问题标题】:Split algorithm on a string list字符串列表上的拆分算法
【发布时间】:2018-01-14 15:45:28
【问题描述】:

我正在寻找一种方法来生成带有任何随机字符串列表和预期输出字符串的拆分算法。预期的输出字符串每次都会有一个“:”分隔符。

import re

to_split = """
'email = "foo@mail.com, info = "lalsdfaslsad"))'
'email = "bar@mail.com, info = "lasdfl1241aslsad"))'
'email = "foooo@3robosa.com, info = "lalsdfsdfas241lsad"))'
'email = "foooodf@sdfrobosa.com, info = "ladsfsdflas241lsad"))'
'email = "foooo@dsdfrobosa.com, info = "lalas241lsad"))'
'email = "foooo@ferobosa.com, info = "lalas241lsad"))'
'email = "foooo@rodbosa.com, info = "lalas241lsad"))'
'email = "foooo@rodsfa.com, info = "laldsfsdfas241lsad"))'
""".splitlines()


def split_it(s, e):
    ms = 10
    for line in s:
        for item in e.split(':'):
            if line.find(item) != -1:
                l_chars = re.escape(line[line.rfind(item) - ms:line.rfind(item)])
                r_chars = re.escape(line[line.rfind(item) + len(item):line.rfind(item) + len(item) + ms])

                if l_chars and r_chars:
                    for line2 in s:
                        regex = r'{}(.+?){}'.format(l_chars, r_chars)
                        if re.search(regex, line2):
                            print re.search(regex, line2).group(1)


expected_output = 'foo@mail.com:lalsdfaslsad'
split_it(to_split, expected_output)

电流输出:

foo@mail.com
bar@mail.com
foooo@3robosa.com
foooodf@sdfrobosa.com
foooo@dsdfrobosa.com
foooo@ferobosa.com
foooo@rodbosa.com
foooo@rodsfa.com
lalsdfaslsad
lasdfl1241aslsad
lalsdfsdfas241lsad
ladsfsdflas241lsad
lalas241lsad
lalas241lsad
lalas241lsad
laldsfsdfas241lsad

预期输出:

foo@mail.com:lalsdfaslsad
bar@mail.com:lasdfl1241aslsad
foooo@3robosa.com:lalsdfsdfas241lsad
foooodf@sdfrobosa.com:ladsfsdflas241lsad
...

提前谢谢大家

【问题讨论】:

  • 您是否尝试将每封电子邮件与其“信息”连接起来??
  • 为什么字符串中有 3 " - 那是不平衡的 - 我的眼睛 huuuuuurt

标签: python


【解决方案1】:
a = 'email = "foo@mail.com, info = "lalsdfaslsad"))'
a = a.split(", ")
print ":".join([a[0].split("=")[-1],  a[1].split("=")[-1]]).replace("))", "").replace('"', "")

结果:

"foo@mail.com: lalsdfaslsad

【讨论】:

  • 我应该提到“to_split”不会每次都是相同的格式。还需要“expected_output”变量。
【解决方案2】:

您可以使用re.findall 捕获出现在= 之后的所有文本,并加入所需的:

import re
to_split = """
 'email = "foo@mail.com, info = "lalsdfaslsad"))'
 'email = "bar@mail.com, info = "lasdfl1241aslsad"))'
 'email = "foooo@3robosa.com, info = "lalsdfsdfas241lsad"))'
 'email = "foooodf@sdfrobosa.com, info = "ladsfsdflas241lsad"))'
 'email = "foooo@dsdfrobosa.com, info = "lalas241lsad"))'
 'email = "foooo@ferobosa.com, info = "lalas241lsad"))'
 'email = "foooo@rodbosa.com, info = "lalas241lsad"))'
 'email = "foooo@rodsfa.com, info = "laldsfsdfas241lsad"))'
 """
new_l = '\n'.join(filter(None, [':'.join(re.findall('(?<=\s\=\s")[a-zA-Z@\.]+', i[:-2])) for i in filter(None, to_split.split('\n'))]))
print(new_l)

输出:

foo@mail.com:lalsdfaslsad
bar@mail.com:lasdfl
foooo@:lalsdfsdfas
foooodf@sdfrobosa.com:ladsfsdflas
foooo@dsdfrobosa.com:lalas
foooo@ferobosa.com:lalas
foooo@rodbosa.com:lalas
foooo@rodsfa.com:laldsfsdfas

【讨论】:

  • 我应该提到“to_split”不会每次都是相同的格式。还需要“expected_output”变量。
  • @Sansch 我将输出更改为反射expected_output。但是,如果 to_split 可能会有所不同,那么这些差异会是什么样子?
  • 基本上我试图解析不同类型的数据库。所以我试图将一项与预期输出匹配,抓住拆分条件并在所有行上使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2018-06-15
  • 2020-04-14
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多