Как разделить строку из нескольких слов, но избежать разделения на определенные комбинации слов? - PullRequest
0 голосов
/ 16 октября 2019

Скажите, у меня есть строка как:

mystr = "my name is some good name"

# I want to split at white space except for the part "name is"
expectedoutput = ["my", "name is", "some", "good", "name"]

Как я могу сделать это с и без shlex?

Я пытался сделать так:

Import shlex
def careful_split(inputstr, donot_split = "name is"):
    strlex = shlex.shlex(inputstr, commenters =?, posit = ?)
    strlex.wordchars = ?
    #and other shlex function

    return list(strlex)

1 Ответ

3 голосов
/ 16 октября 2019

Вы можете использовать регулярное выражение с отрицательным прогнозом .

import re

re.split(r'(?!name)\s+(?!is)', mystr)

Пример с большим количеством случаев:

>>> mystr = "my name is some good name is hi name"
>>> re.split(r'(?!name)\s+(?!is)', mystr)
['my', 'name is', 'some', 'good', 'name is', 'hi', 'name']

Обратите внимание, что это не будет разбивать ни одну фразу *.name is.*. Так что «имя не» также не будет разделено. Я не уверен, каково ваше желаемое поведение в этих случаях.

...