Python: регулярное выражение, чтобы отделить образец от слова и напечатать остальные - PullRequest
2 голосов
/ 10 июля 2019

Предположим, есть эта строка текста:

SUBSTR (имя, 1,20) имя, фамилия, имя

Я хочу напечатать всю строку, исключая SUBSTR(name,1,20). Я хочу использовать регулярное выражение для этого, но я застрял, потому что я не понимаю регулярных выражений.

Я написал статью только для SUBSTR, но она не работает.

import re
x="SUBSTR Hi"
func= re.sub("\bSUBSTR\b","",x)
f=x.strip()
print(f)

Он печатает все значение x вместо просто Hi. Как удалить SUBSTR(name,1,20)? Я не хочу использовать полосу, например x.strip(SUBSTR(name,1,20), потому что у меня будет несколько шаблонов для записи.

Ответы [ 3 ]

2 голосов
/ 10 июля 2019

Для удаления определенного шаблона с необязательной последовательностью без пробелов:

import re

s = 'SUBSTR(name,1,20) first_name, last_name, name'
res = re.sub(r'\bSUBSTR[^\s]*', '', s)
print(res)   #  first_name, last_name, name
1 голос
/ 10 июля 2019

REGEX: (\b(SUBSTR)+\(.*?,.*?,.*?\))

import re

s = "SUBSTR(name,1,20) first_name, last_name, name"
print(re.sub(r"(\b(SUBSTR)+\(.*?,.*?,.*?\))", "", s).strip())

Выход:

first_name, last_name, name

Шаблон удаляет часть строки, которая начинается с SUBSTR и все, что остается после него в () . Если есть () , то должно быть три значения с разделителем ',' . Он не будет удалять, например, SUBSTR(), потому что нет входных значений. Если он должен быть удален, используйте \b(SUBSTR)+\(.*?\)).

1 голос
/ 10 июля 2019

Использовать шаблон (\b[A-Z]+\(.*?\)) в re.sub

Ex:

import re

s = "SUBSTR(name,1,20) first_name, last_name, name"
print(re.sub(r"(\b[A-Z]+\(.*?\))", "", s).strip())

Выход:

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