Неверный вывод из кода с использованием теста isspace () для значений индекса - PullRequest
0 голосов
/ 18 февраля 2020

По какой-то причине этот код работает неправильно. Я пытаюсь заменить только тире, которые не имеют пробелов вокруг них. Тем не менее, тире по-прежнему заменяются, когда нет пробелов.

    ls = []
    for idx, letter in enumerate(line):
        if letter == '-':
            ls.append(idx)
    for m in ls:
        if line[m-1].isspace() == True and line[m+1].isspace() == True:
            line = line[m].replace('-', ' @-@ ')

Например:

If thieves came to you, if robbers by night -- oh, what disaster awaits you -- wouldn't they only steal until they had enough? If grape pickers came to you, wouldn't they leave some gleaning grapes?
How Esau will be ransacked! How his hidden treasures are sought out example-case!

Дает:

If thieves came to you , if robbers by night  @-@  @-@  oh , what disaster awaits you  @-@  @-@  wouldn ' t they only steal until they had enough ? If grape pickers came to you , wouldn ' t they leave some gleaning grapes ?
How Esau will be ransacked ! How his hidden treasures are sought out example @-@ case !

Примечание: есть здесь происходит токенизация других данных.

Желаемый вывод:

If thieves came to you , if robbers by night -- oh , what disaster awaits you -- wouldn ' t they only steal until they had enough ? If grape pickers came to you , wouldn ' t they leave some gleaning grapes ?
How Esau will be ransacked ! How his hidden treasures are sought out example @-@ case !

Спасибо за помощь!

1 Ответ

0 голосов
/ 18 февраля 2020

Вы изменяете строку при доступе к ней, поэтому ваши индексы будут неправильными, если вы не исправите их вручную.

Это действительно тот случай, когда вы захотите использовать регулярное выражение, используя взгляд назад:

import re

line = "How his hidden treasures -- oh, what was the line again -- are sought out example-case!"
fixed_line = re.sub(r"(?<=[^\s])-(?=[^\s])", " @-@ ", line)
print(fixed_line)

выходы

How his hidden treasures -- oh, what was the line again -- are sought out example @-@ case!
...