У меня есть строки, как показано ниже:
s1 = "My email Id is abcd@g mail.com"
s2 = "john@ hey.com is my email id"
s3 = "id is rock@gmail .com"
s4 = "The id is sam @yahoo.in"
Я должен заменить пустое место в идентификаторе электронной почты, используя регулярное выражение. Как я могу это достичь?
Я старался
s = re.sub(r'@\w*[\s]+[\w]*\.', r'', s1)
который дает мне результат как:
'My email Id is abccom'
Выход должен быть:
'My email Id is [email protected]'
Я не уверен, как заменить только пустое значение на re.sub
.
Любые предложения приветствуются
Спасибо,
Вы можете использовать вызываемый для удаления пробелов после сопоставления адресов электронной почты с пробелами с использованием re.sub
.
import re
l = [
"My email Id is abcd@g mail.com",
"john@ hey.com is my email id",
"id is rock@gmail .com",
"The id is sam @yahoo.in"
]
for s in l:
print(re.sub(r'[\w.-]+ ?@(?:[\w-]+\.[\w -]+|[\w -]+\.[\w-]+)', lambda e: e[0].replace(' ', ''), s))
Эти результаты:
My email Id is [email protected]
[email protected] is my email id
id is [email protected]
The id is [email protected]
Вы можете использовать обратные ссылки в re.sub
(онлайн-regex здесь):
import re
data = [
"My email Id is abcd@g mail.com",
"Email Id: defg@yah oo.com",
"id is rock@gmail .com"
]
for s in data:
print(re.sub(r'(@.*)(\s+)(.*)', r'\1\3', s))
Печать:
My email Id is [email protected]
Email Id: [email protected]
id is [email protected]
РЕДАКТИРОВАТЬ:
Если пустое пространство перед @
, регулярное выражение несколько сложнее (чтобы не соответствовать, например, "aaa bbb ccc [email protected]", онлайн-регулярное выражение здесь):
import re
data = [
"My email Id is ab [email protected]",
"Email Id: def [email protected]",
"id is roc [email protected]",
"aaa bbb ccc [email protected]"
]
for s in data:
print(re.sub(r'(?=is|:)(.*)\s+(.*@.*)', r'\1\2', s))
Печать:
My email Id is [email protected]
Email Id: [email protected]
id is [email protected]
aaa bbb ccc [email protected]
Теперь мы можем объединить эти регулярные выражения:
import re
data = [
"My email Id is ab [email protected]",
"Email Id: def g@ya hoo.com",
"id is roc k@gm ail.com",
"aaa bbb ccc [email protected]"
]
for s in data:
s = re.sub(r'(@.*)\s+(.*)', r'\1\2', s)
s = re.sub(r'(?=is|:)(.*)\s+(.*@.*)', r'\1\2', s)
print(s)
Будет печать:
My email Id is [email protected]
Email Id: [email protected]
id is [email protected]
aaa bbb ccc [email protected]