我目前正在尝试创建短信命令服务器(基本上,我发送文本到谷歌语音,转发到我的电子邮件,我使用python IMAP库来访问该邮件,我解析它),我有一个有趣的问题。有时,当文本出现时,字符串
--
Sent using SMS-to-email. Reply to this email to text the sender back and save on SMS fees.
https://www.google.com/voice/
附加到文本消息,在解析命令时会导致错误。现在,为了检测命令,我使用以下正则表达式(由于某些命令,例如可能使用多行的定时发送命令,它是多行和区分大小写的):
^/(randomfact) *(\S*)\s*$
但是,由于字符串告诉我它是通过短信发送到电子邮件的,因此偶尔会发现,匹配不会被检测到。使用python的print
函数,消息显示如下:
/randomfact\r\n\r\n--\r\nSent using SMS-to-email. Reply to this email to text the sender back and \r\nsave on SMS fees.\r\nhttps://www.google.com/voice/
现在,为了解决这个问题,我尝试过这样做:
^/(randomfact)\s*(\d*)(?=\n\n--\nSent using SMS-to-email\. Reply to this email to text the sender back and save on SMS fees\.\nhttps://www\.google\.com/voice/)
但它仅在字符串IS附加到命令时才有效。如果不是,则正则表达式失败。我的问题是:有没有办法从任何正则表达式匹配中排除该字符串,无论它是否存在于字符串中?
答案 0 :(得分:0)
如果我正确理解您的问题,您将过滤掉邮件的可选签名。在python中,你应该能够设置单行正则表达式标志(即re.S
),并使用以下正则表达式来捕获所需的内容。
regex = re.compile(r'(.+)(?=--)|(.+)', r.S)
答案 1 :(得分:0)
def remove_footer(incoming_str):
footer = '''
--
Sent using SMS-to-email. Reply to this email to text the sender back and save on SMS fees.
https://www.google.com/voice/'''
if incoming_str[-len(footer):] == footer:
return incoming_str[:-len(footer)]
else:
return incoming_str
有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。