Как найти все слова, которые соответствуют регулярному выражению? - PullRequest
1 голос
/ 05 марта 2019

Возможно, об этом уже спрашивали, но я не могу найти решение. Предположим, мой текст 'C:\\Windows\\system32\\cmd.exe /v /c hello cmd.exe', и я хочу найти и удалить все слова с регулярным выражением r'cmd.exe'. Результат должен быть: '/v /c hello'.

Вот что я пытался: во-первых, я пытался найти индексы границ слов, чтобы я мог их удалить. Но я получил индексы для точного регулярного выражения ... а не для всего подходящего слова.

In [41]: [(m.start(0), m.end(0)) for m in re.finditer(r'\b\w*cmd.exe\w*\b', cmd)]
Out[41]: [(20, 27), (40, 47)]

In [42]: [(m.start(0), m.end(0)) for m in re.finditer(r'cmd.exe', cmd)]
Out[42]: [(20, 27), (40, 47)]

In [44]: result = re.findall(r'cmd.exe', cmd, re.I)

In [45]: result
Out[45]: ['cmd.exe', 'cmd.exe']. <-- I wanted ['C:\\Windows\\system32\\cmd.exe', 'cmd.exe']

In [48]: result = re.findall(r'cmd.exe|\bcmd.exe\b', cmd, re.I)

In [49]: result
Out[49]: ['cmd.exe', 'cmd.exe']

Короче говоря, как получить все слова, которые содержат подстроку / регулярное выражение?

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

Не говорю, что регулярное выражение - это плохо *, но почему бы просто:

txt = 'C:\\Windows\\system32\\cmd.exe /v /c hello cmd.exe'
outcome = ' '.join([part for part in txt.split(' ') if not 'cmd.exe' in part])

, что дает:

'/v /c hello'

* Некоторые люди, сталкиваясь с проблемой, думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них две проблемы.

1 голос
/ 05 марта 2019

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

>>> s = r'C:\\Windows\\system32\\cmd.exe /v /c hello cmd.exe'
>>> print (re.sub(r'\S*cmd\.exe\S*\s*', '', s))
/v /c hello

Подробности RegEx:

  • '\S*: совпадение 0 или более непробельных символов
  • cmd\.exe: сопоставление cmd.exe
  • \S*: сопоставление 0 или более непробельных символов
  • \s*: сопоставление 0 или более пробельных символов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...