/ / Python regex замества група 1 с определен низ - python, regex

Python regex замества група 1 с определен низ - python, regex

Чудя се как да замени група 1 с определен низ от regex в python.

Въпрос 1:

str = "aaa bbb ccc"
regex = "baaa (bbb)b"
repl = "111 bbb 222"

Използвайте regex, за да съответствате на str, съответстващи на "aaa bbb", и заменете group1 "bbb" с "111 bbb 222" и получете резултата "aaa 111 bbb 222 ccc"

str_repl = "aaa 111 bbb 222 ccc"

Благодаря за @RomanPerekhrest и @janos 's lookbehind метод.

И се чудя как да решим по-общ сценарий:

Въпрос 2:

s1 = "bBb"
regex = "(?<=baaa )" + s1 + "b"  # may not suitable
repl = "XxX " + s1 + " YyY"

мишена:

s0 = "aaa bBb ccc"
s0_repl = "aaa XxX bBb YyY ccc"

s1 = "aaa bbb ccc"
no match

s2 = "AAA bBb ccc"
s2_repl = "AAA XxX bBb YyY ccc"

Игнорирайте случая за подстрока, с изключение на s1 при съвпадение в оригиналния низ.

Question3:

s1 = "bbb"
regex = "(?<=baaa )" + s1 + "b"  # may not suitable
repl = "XxX " + s1 + " YyY"

мишена:

s0 = "aaa bBb ccc"
s0_repl = "aaa XxX bBb YyY ccc"

s1 = "aaa bbb ccc"
s1_repl = "aaa XxX bbb YyY ccc"

s2 = "AAA BBB ccc"
s2_repl = "AAA XxX BBB YyY ccc"

Игнорирайте случая за подстрока, с изключение на s1 при съвпадение и заместване в оригиналния низ.

Question4:

Ако има начин да се замени група 1 на оригиналния низ от regex на python?

Отговори:

1 за отговор № 1

Можете да използвате re пакет и положителен външен вид:

import re
s = "aaa bbb ccc"
regex = r"b(?!aaa )(bbb)b"
repl = "111 bbb 222"
print(re.sub(regex, repl, s))

Това ще доведе до:

aaa 111 bbb 222 ccc

Обърнете внимание на промените, които направих там:

  • Най- aaa префиксът в регулярния израз е опакован (?!...), Това означава, съвпадат bbb ако следва aaa, без да се включват aaa в шаблона за замяна. Това се нарича положителен външен вид. Без тази промяна на вашия regex, aaa ще изчезне заедно с bbb
  • Редът на нормалните изрази трябва да бъде записан като r"...", за да ги направи сурови струни, за да се избегнат проблеми с евакуационните последователности
  • Прекръстих str променлива до s, защото str е запазена дума в Python, както посочи и Алена.

0 за отговор № 2

Първо, не използвайте str като име на променлива. Това е резервирана ключова дума в Python.

import re

str1 = "aaa bbb ccc"
re.sub("bbb", "111 bbb 222", str1)
Out[11]: "aaa 111 bbb 222 ccc"

0 за отговор № 3

За да замените последователността bbb които трябва да се предхождат от последователност aaa използвайте следния подход:

s = "aaa bbb ccc"
regex = r"(?<=aaa )bbbb"
repl = "111 bbb 222"

str_replaced = re.sub(regex, repl, s)
print(str_replaced)

Резултатът:

aaa 111 bbb 222 ccc

(?<=aaa ) - изглежда положително, гарантира това "bbb" се предхожда от "aaa "

http://www.regular-expressions.info/lookaround.html