我有一个字符串,例如 manipulate widgets add,1,2,3
(抱歉,我无法更改格式)。
我想删除前 X 个单词和所有在它们之前的定界符。
我们以3为例,删除manipulate widgets add
,留下,1,2,3
或者,将 manipulate,widgets,add,1,2,3
删除两个词 (manipulate,widgets
) 并保留 ,add,1,2 ,3
我可以使用 words = re.split('[' + delimiters + ']',inputString.strip())
将字符串拆分成一个列表,但我不能简单地删除拳头X个字
与,比方说,
for i in range(1, numWorsdToRemove):
del words[0]
然后 return ' '.join(words)
因为这给了我 1 2 3 4
。
如何才能保留未删除词的原始分隔符?
为了让它更有趣,输入字符串可以在单词之间包含多个空格或制表符;只有一个逗号,但在它之前/之后也可能有空格:
操纵 ,widgets add , 1, 2 , 3
请注意,不能保证单词是唯一的,所以我不能在要删除的单词之后获取单词的索引并使用它来返回位置子字符串。
[更新] 我接受了 'Kasramvd 解决方案,但后来发现它没有正确处理 remover('LET FOUR = 2 + 2', 2)
或 remover('A -1 B text.txt', 2)
,所以现在我提供赏金。
[Update++] 分隔符是空格、制表符和逗号。其他所有内容(包括等号、减号等)都是单词的一部分(尽管如果回答者能告诉我将来如何在必要时添加新的定界符,我会很高兴)
最佳答案
你可以像这样定义一个正则表达式
>>> import re
>>> regEx = re.compile(r'(\s*,?\s*)')
这意味着,一个可选的逗号后跟或前面有零个或多个空白字符。括号是为了创建一个匹配组,它会在拆分过程中保留分隔符。
现在根据RegEx进行拆分,然后跳过你不想要的实际元素个数,以及这些元素对应的分隔符个数(比如你要跳过三个元素,那么就会有两个三个元素之间的分隔符。因此您可能希望从拆分数据中删除前五个元素)并最终加入它们。
例如,
>>> def splitter(data, count):
... return "".join(re.split(regEx, data)[count + (count - 1):])
...
>>> splitter("manipulate,widgets,add,1,2,3", 2)
',add,1,2,3'
>>> splitter("manipulate widgets add,1,2,3", 3)
',1,2,3'
关于python - 删除字符串的前 X 个单词和分隔符 - 具有多个分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35890223/