Python добавляет пробел до и после слова для поиска, если его нет в файле - PullRequest
2 голосов
/ 18 октября 2019

Мы пытаемся добавить пробел до и после сопоставленного слова из списка поисковых слов для каждой строки в файле, если пробела нет.

Ввод: Привет Это менеджер Сэм,Здравствуйте, это директор. Том. Как твой день Мистер Менеджер Сэм.

import re
f1=open('input.txt', 'r')
f2=open('outout.txt', 'w')
checkWords = ("Manager",Director)

for line in f1:
    for checkword in checkWords:
        line = re.sub(r'(\b${0}\b)'.format(checkword), r'\1 ', line)
    print(line)
    f2.write(line)
f1.close()
f2.close()

Ожидаемый результат: Привет Это менеджер Сэм. Здравствуйте, это директор. Том. Как твой день, мистер менеджер Сэм.

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Может быть, вы можете использовать (индекс контрольного слова - 1) и (индекс контрольного слова + длина слова), чтобы проверить, есть ли там пробел или нет. Тогда вы можете использовать replace () соответственно.

0 голосов
/ 18 октября 2019

Это не очень аккуратно, но это дает ожидаемый результат:

import re

s = "Hi This is Manager Sam. Hello, this is Director.Tom. How is your Day Mr.Manager Sam."
words = ("Manager", "Director")


def add_spaces(string, words):

    for word in words:
        # pattern to match any non-space char before the word
        patt1 = re.compile('\S{}'.format(word))

        matches = re.findall(patt1, string)
        for match in matches:
            non_space_char = match[0]
            string = string.replace(match, '{} {}'.format(non_space_char, word))

        # pattern to match any non-space char after the word
        patt2 = re.compile('{}\S'.format(word))
        matches = re.findall(patt2, string)
        for match in matches:
            non_space_char = match[-1]
            string = string.replace(match, '{} {}'.format(word, non_space_char))

    return string


print(add_spaces(s, words))

Вывод:

'Hi This is Manager Sam. Hello, this is Director .Tom. How is your Day Mr. Manager Sam.'

Обратите внимание, что '\ S' - это символ регулярного выражения, соответствующий любому непробельному пространству.

Редактировать: вероятно, есть более аккуратный способ сделать это с re.sub ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...