#python #regex #string #replace #re
#python #регулярное выражение #строка #заменить #python-re
Вопрос:
Мне нужно добавить предыдущее слово в -number, которое произошло до -number предложения. Пожалуйста, просмотрите входную строку и ожидаемую выходную строку для получения дополнительных разъяснений. Я пробовал .replace
.sub
методы регулярных выражений со статическим способом, который является своего рода обработанным выводом.
Входная строка:
Угри стимулировали экспрессию мРНК интерлейкина (IL) -1, -8, LL-37, MMP-1, -2, -3, -9 и -13 в кератиноцитах.
Ожидаемая выходная строка:
Угри стимулировали экспрессию мРНК интерлейкина (IL)-1, интерлейкина (IL)-8, LL-37, MMP-1, MMP-2, MMP-3, MMP-9 и MMP-13 в кератиноцитах.
Код:
import re
string_a = "The acnes stimulated the mRNA expression of interleukin (IL)-1, -8, LL-37, MMP-1, -2, -3, -9, and -13 in keratinocytes."
regex1 = re.findall(r"[a-z] s ( [A-Z] ) -d ,s -d, ", string_a)
regex2 = re.findall(r"[A-Z] -d ,s -d,s -d,s -d,s [a-z] s -d ", string_a)
Комментарии:
1. не могли бы вы сделать строку вашего примера немного короче?
2. @PatrickParker Теперь я сделал его короче.
Ответ №1:
Вы можете использовать
import re
string_a = "The acnes stimulated the mRNA expression of interleukin (IL)-1, -8, LL-37, MMP-1, -2, -3, -9, and -13 in keratinocytes."
pattern = re.compile(r"b([A-Za-z] s*([A-Z] )|[A-Z] )(s*-d (?:,s*-d )*)(?:,s*ands (-d ))?")
print( pattern.sub(lambda x: x.group(1) f', {x.group(1)}'.join(map(str.strip, x.group(2).strip().split(','))) (f', and {x.group(1)}{x.group(3)}' if x.group(3) else ''), string_a) )
# => The acnes stimulated the mRNA expression of interleukin (IL)-1, interleukin (IL)-8, LL-37, MMP-1, MMP-2, MMP-3, MMP-9, and MMP-13 in keratinocytes.
Смотрите демонстрацию Python и демонстрацию регулярных выражений.
Подробные сведения
b
— граница слова([A-Za-z] s*([A-Z] )|[A-Z] )
— Захват группы 1: одна или несколько букв ASCII, затем ноль или более пробелов,(
, одна или несколько прописных букв ASCII и a)
, ИЛИ одна или несколько прописных букв ASCII(s*-d (?:,s*-d )*)
— Захват группы 2: ноль или более пробелов,-
, одна или более цифр, а затем ноль или более последовательностей запятой, ноль или более пробелов-
и одна или более цифр(?:,s*ands (-d ))?
— необязательная группа без захвата: запятая, ноль или более пробелов,and
, один или несколько пробелов, затем группа захвата 3:-
, одна или несколько цифр.
Значение группы 1 добавляется ко всем числам группы 2, разделенным запятыми, внутри лямбда-выражения, используемого в качестве заменяющего аргумента.
Если группа 3 совпадает, and
пробел добавляются объединенные значения группы 1 и группы 3.
Комментарии:
1. @SachinSinkar Я видел это, но мне не ясно, какие здесь правила.