получить полную строку до и после определенного шаблона - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь получить текст с определенным рисунком:

text = "this is some text lskdfmd&@kjansdl and some more text sldkf&@lsakjd and some other stuff"

Я хочу быть в состоянии удалить все в этом предложении, где после пробела и до пробела содержит & @.

result = "this is some text and some more text and some other stuff"

пытался:

re.compile(r'([\s]&@.*?([\s])).sub(" ", text)

Кажется, я не могу получить первую часть.

Ответы [ 3 ]

3 голосов
/ 23 апреля 2019

Попробуйте:

import re
result = re.findall(r"[a-zA-z]+\&\@[a-zA-z]+", text) 
print(result)
['lskdfmd&@kjansdl', 'sldkf&@lsakjd']

теперь удалите список result из списка всех слов.

Edit1 Предложить @ Jan

re.sub(r"[a-zA-z]+\&\@[a-zA-z]+", '', text)
output: 'this is some text  and some more text  and some other stuff'

Редактировать2 Предложено @Pushpesh Кумар Раджванши

re.sub(r" [a-zA-z]+\&\@[a-zA-z]+ ", " ", text)
output:'this is some text and some more text and some other stuff'
2 голосов
/ 23 апреля 2019

Вы можете использовать

\S+&@\S+\s*

См. демонстрацию на regex101.com .


В Python:
import re
text = "this is some text lskdfmd&@kjansdl and some more text sldkf&@lsakjd and some other stuff"
rx = re.compile(r'\S+&@\S+\s*')
text = rx.sub('', text)
print(text)

Что дает

this is some text and some more text and some other stuff
2 голосов
/ 23 апреля 2019

Вы можете использовать это регулярное выражение, чтобы захватить эту строку шума,

\s+\S*&@\S*\s+

и заменить ее одним пробелом.

Здесь \s+ соответствует любым пробелам, а затем \S* соответствует нулю или нескольким непробельным символам, а сэндвич &@ внутри него и снова \S* соответствует нулю или нескольким пробелам и, наконец, \s+ один или несколько пробелов, которые удаляются пробелом, давая вамВаша предполагаемая строка.

Кроме того, если эта шумовая строка может находиться либо в самом начале, либо в самом конце строки, смело меняйте \s+ на \s*

Regex Demo

Код Python,

import re

s = 'this is some text lskdfmd&@kjansdl and some more text sldkf&@lsakjd and some other stuff'
print(re.sub(r'\s+\S*&@\S*\s+', ' ', s))

Печать,

this is some text and some more text and some other stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...