Замена в пределах определенного шаблона в строке |Regex - PullRequest
0 голосов
/ 30 декабря 2018

Я хочу заменить символ '/', когда он встречается в определенном шаблоне (перед которым следует символ), "".

Пример

  1. "a/b b/c" следует заменить на "ab bc"

  2. "a/b python/Java" следует заменить на "ab python/Java"

Пока я знаю, как заменитьПри использовании регулярного выражения re.sub("/","","a/b python") проблема заключается в том, что замену необходимо выполнять только в определенных частях строки.

Любая помощь здесь будет принята с благодарностью.Спасибо

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Что вы можете сделать, это сначала сопоставить шаблон с 1+ символами, /, 1+ символами между двойными кавычками.Тогда, так как шаблон соответствует, вы можете разделить строку и проверить, имеет ли элемент длину строки 3. 3. 1002 *

Если это так, используйте map и замените / пустой строкой и восстановите строку.

Соответствует полному шаблону:

"\w+\/\w+(?: \w+\/\w+)*"

Regex demo | Python demo

Например:

import re

regex = r"\"\w+\/\w+(?: \w+\/\w+)*\""
test_str = ("\"a/b b/c\"\n"
    "\"a/b python/Java\"")
matches = re.findall(regex, test_str, re.MULTILINE)

for match in matches:
    res = map(lambda s: s.replace("/", "") if len(s) == 3 else s, match.strip("\"").split())
    print('"{0}"'.format(" ".join(res)))

Результат

"ab bc"
"ab python/Java"
0 голосов
/ 30 декабря 2018

Это упрощает и расширяет Code Maniac's комментарий:

Вы можете заменить найденный шаблон, используя re.sub

import re

regex = r"(\b\w)\/(\w\b)" # do not capture the /

test_str = """a/b b/c
a/b python/Java"""

subst = r"\1\2"           # replace with 1st and 2nd capture group
result = re.sub(regex, subst, test_str, flags=re.MULTILINE)

if result:
    print (result)

Asшаблон r"(\b\w)\/(\w\b)" Вы определяете границу слова + 1 символ слова, за которым следует \, за которым следует еще 1 символ слова, за которым следует граница слова.Вы фиксируете его как группы 1. и 2. - \ не фиксируется.

Вы заменяете каждое совпадение захваченными группами до / после /.

Вывод:

ab bc
ab python/Java

Тест: https://regex101.com/r/WI0Wg3/1

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