重新拆分:查找拆分原因

时间:2019-11-29 23:06:31

标签: python regex

在以下示例中,在关键字SELECT DATE_FORMAT(FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(dt))) , '%Y-%m-%d') FROM data; dolor sitelitr sed处拆分了一个字符串。

我有什么选择来找出哪个关键字在给定位置导致了拆分(请参见预期的输出)?

something else

输出:

import re

example_input = 'Lorem ipsum dolor sit amet consetetur sadipscing elitr sed diam nonumy'
splitted_string = re.split('dolor sit|elitr sed|something else', example_input)

for (index, part) in enumerate(splitted_string, 1):
    if index == len(splitted_string):
        print (part.strip())
    else:
        print (part.strip(), '-', '???')

预期输出:

Lorem ipsum - ???
amet consetetur sadipscing - ???
diam nonumy

3 个答案:

答案 0 :(得分:1)

实际上,这是使用正则表达式的好地方,通过一个操作,您将消耗字符串并执行简单的替换:

import re

string = '''
Lorem ipsum dolor sit amet consetetur sadipscing elitr sed diam nonumy
Lorem ipsum dolor sit amet consetetur sadipscing elitr sed diam nonumy

'''

print(re.sub(r'(dolor sit|elitr sed|something else)\s+', r'- \1\n', string))

它将输出:


Lorem ipsum - dolor sit
amet consetetur sadipscing - elitr sed
diam nonumy
Lorem ipsum - dolor sit
amet consetetur sadipscing - elitr sed
diam nonumy

答案 1 :(得分:1)

您可以通过将正则表达式放在括号中来捕获拆分定界符,例如:

re.split(r'(dolor sit|elitr sed|something else)', example_input)

这将返回拆分项列表,后跟定界符,如:

['Lorem ipsum ', 'dolor sit', ' amet consetetur sadipscing ', 'elitr sed', ' diam nonumy']

这样,您就可以循环访问并拉出分隔符。

import re
from itertools import zip_longest

example_input = 'Lorem ipsum dolor sit amet consetetur sadipscing elitr sed diam nonumy'
splits = re.split(r'(dolor sit|elitr sed|something else)', example_input)

for (part, delimiter)in zip_longest(splits[::2], splits[1::2]):
    print(part.strip(), '-', delimiter)

这将打印:

  

Lorem ipsum-多洛尔(Dolor)坐在
  amet consetetur sadipscing-elitr sed
  diam nonumy-无

答案 2 :(得分:0)

import re

example_input = 'Lorem ipsum dolor sit amet consetetur sadipscing elitr sed diam nonumy'
splitted_string = re.split('dolor sit|elitr sed|something else', example_input)

for (index, part) in enumerate(splitted_string):
    next_index = index + 1 if index + 1 < len(splitted_string) else index

    next_part = example_input[example_input.find(part) +
                              len(part): example_input.find(splitted_string[next_index])]

    output = ' - ' + next_part if next_part else ''
    print(part.strip(), output)