【问题标题】:Does Python Have a Wildcard Similar to PowerShell?Python 是否有类似于 PowerShell 的通配符?
【发布时间】:2019-05-28 13:37:30
【问题描述】:

我目前正在处理一个电子邮件收件箱自动化项目,我正在尝试使用通配符来查找某些电子邮件主题。电子邮件有时会随机生成票号,因此我需要对此进行补偿。这是我在 PowerShell 中的编写方式。

if($email.'Subject' -like 'Test Number:*') {...}

这将针对主题行为Test Number: 的每封电子邮件触发,无论后面随机生成的数字如何。

据我所知,Python 并不像 PowerShell 那样简单地使用通配符-like*。或者我很笨,找不到它。我看到的唯一一件事是安装模块以使通配符起作用。 Python 有内置通配符吗?

【问题讨论】:

  • 在python中,可以在字符串中写if substring。例如,如果 your_email_subject_line 中的“测试编号:”

标签: python powershell email wildcard


【解决方案1】:

你可以在你的情况下使用startswith

email_subjects = ['Test:1', 'Test:25', 'not_valid!']
for email_subject in email_subjects:
    if email_subject.startswith('Test:'):
        print('valid email subjet', email_subject)
    else:
        print('invalid email subjet', email_subject)

备注:

  • substring* 等价于string.startsWith(substring)
  • *子串等价于string.endswith(substring)
  • *substring* 等价于substring in string

如果你有一些更复杂的模式,我建议你使用re 模块。例如,你想匹配每个:'Test:X 和 X 一个介于 125 之间的数字

import re

email_subjects = ['Test:1', 'Test:25', 'not_valid!', 'Test:52']
for email_subject in email_subjects:
    if re.search(''^Test:([0-9]|1[0-9]|2[0-5])$'', email_subject): # Compiles to a regular expression and looks for it in email_subject
        print('valid email subjet', email_subject)
    else:
        print('invalid email subjet', email_subject)

正则表达式分解:

  • ^起始字符匹配
  • Test:你要匹配的字符串
  • ([0-9]|1[0-9]|2[0-5]): 你的范围,意思是:0 到 9 之间的数字,或者 1 和 0 到 9 之间的数字(表示 10 到 19 之间)或 2 和 0 到 5 之间的数字(表示 20 到 5 之间) 25)
  • $结束符

【讨论】:

  • 最后一部分非常混乱。在您的代码中,它必须是 ".*" 才能与正则表达式中任意数量的任何符号匹配。并声称正则表达式 "<pattern>.*" 等同于 string.startsWith(pattern) 是不正确的。使用 re 时,pattern 编译为正则表达式,而 startswith 查找与 pattern 字符串的完全匹配
  • 嗯嗯,我明白你的意思了,我会改写!谢谢指出
  • 在您的第一个示例中,当您拥有['Test:1', 'Test:25', 'not_valid!'] 时,这些数字是否会触发该范围?就像它只会捕获带有数字 1-25 的电子邮件吗?
  • @JK72 这不会检查'Test:'之后的内容,但是正则表达式可以,我会更新正则表达式!
  • @JK72 更新了!
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2014-06-20
  • 1970-01-01
相关资源
最近更新 更多