【发布时间】:2016-11-18 17:44:18
【问题描述】:
我需要转换来自用户输入的字符串。用例非常简单:
- 当字符串中有分号时,字符串被分成多行。
- 当连续有两个分号时,它们将转换为一个。
理论上问题不大。我使用 Python,但我相信其他使用其他语言的人会发现使用正则表达式很容易。
import re
def get_lines(text):
"""Return a list of lines (list of str)."""
command_stacking = ";"
delimiter = re.escape(command_stacking)
re_del = re.compile("(?<!{s}){s}(?!{s})".format(s=delimiter), re.UNICODE)
chunks = re_del.split(text)
# Clean the double delimiters
for i, chunk in enumerate(chunks):
chunks[i] = chunk.replace(2 * command_stacking, command_stacking)
return chunks
这似乎有效:
>>> get_lines("first line;second line;third line with;;a semicolon")
['first line', 'second line', 'third line with;a semicolon']
>>>
但是当有三个或四个分号时,它的行为就不像预期的那样。
正则表达式会忽略多个分号(应该如此),但是当用; 替换;; 时,;;; 会被;; 替换,;;;; 会被;;... 替换等等在。如果将 2 替换为 1、3 替换为 2、4 替换为 3,那就太好了……我可以向我的用户解释这一点。
最好的解决方案是什么?
感谢您的帮助,
【问题讨论】: