我正在尝试在Python 2.7中删除字符串中的一些初始前面的字符。更具体地说,字符串是mx记录,看起来像10 aspmx2.googlemail.com
。我需要删除前面的数字(可以是单数字或双数字)和空格字符。
这是我到目前为止提出的代码,但我被困了
mx_name = "10 aspmx2.googlemail.com"
for i in range(0,3):
char = mx_name[i]
if char == "0123456789 ":
short_mx_name.replace(char, "")
由于某种原因,if语句无法正常工作,我不明白为什么。任何帮助将不胜感激。
谢谢。
答案 0 :(得分:3)
您可以使用re.sub
:
import re
mx_name = "10 aspmx2.googlemail.com"
new_name = re.sub("^\d+\s", '', mx_name)
输出:
'aspmx2.googlemail.com'
正则表达式解释:
^
:表达式的锚点,强制它在字符串的开头开始搜索
\d+
:找到所有数字,直到找到非数字字符(在本例中为空格)。
\s
:空白空白,必须包含在此示例中,以便替换也可以捕获数字和电子邮件之间的空格。
简而言之,^\d+\s
在字符串的开头开始搜索,查找所有正在进行的数字,最后以空格为目标,以确保正则表达式不扫描电子邮件的一部分。
答案 1 :(得分:0)
对代码的最小修改是:
mx_name = "10 aspmx2.googlemail.com"
short_name = mx_name[:]
for i in range(0,3):
char = mx_name[i]
if char in "0123456789 ":
short_name = short_name.replace(char, "", 1)
您的if
正在检查字符是否为1234567890
,而不是它是否包含在该集合中。还需要包括1以避免在字符串中进一步分隔数字和空格。
答案 2 :(得分:0)
mx_name.split()[1]
输出:
'aspmx2.googlemail.com'
答案 3 :(得分:0)
使用split
功能
mx_name = "10 aspmx2.googlemail.com"
mx_name_url = mx_name.strip().split(' ')[1]
# aspmx2.googlemail.com
使用slice
功能
mx_name = "10 aspmx2.googlemail.com"
mx_name[3:]
# aspmx2.googlemail.com
答案 4 :(得分:0)
您可以使用正则表达式:
import re
pattern=r'\b[\d\s]{1,3}\b'
string='10 aspmx2.googlemail.com'
new_string=re.sub(pattern,"",string)
print(new_string)
输出:
aspmx2.googlemail.com
单个数字:
string='1 aspmx2.googlemail.com'
然后输出:
aspmx2.googlemail.com
答案 5 :(得分:0)
你应该使用regex
;这个问题有很多正则表达式的答案,但如果你想要一个更抽象的解决方案,你可以使用:
m = "10 aspmx2.googlemail.com"
match = re.search('(?:\s)(\w.*@.*\.)', m)
match.group(1)
'aspmx2.googlemail.com'
此模式将匹配第一个空格后的任何电子邮件地址。
(?:\s)
- 非捕捉空间字符(\w.*@.*\.)
- 匹配字母数字字符和下划线后跟@
以及后面的任何内容这将匹配4123 name@email.com
或some_text name@email.com
等。