【问题标题】:Making sure a string doesn't contain any letters but specific ones with a regex if-statement确保字符串不包含任何字母,而是使用正则表达式 if 语句的特定字母
【发布时间】:2019-03-07 18:49:37
【问题描述】:

每当用户输入错误的输入时,我都想返回 False。为此,我需要检查输入并确保它仅包含特定字母。在这种情况下,我想确保他们的输入仅包含“b”、“r”、“g”、“p”、“y”或“o”。这些字母代表我正在编程的“策划”游戏中的颜色。

问题是,我不确定如何在 python 2.7 中正确使用正则表达式。

如何为包含这些特定字母以外的任何字符的任何字符串触发 if 语句?

示例:

# check for invalid letters
if re.search("^[brgpyo]", player_input_string):
    return False

【问题讨论】:

  • 区分大小写吗?
  • @Manaar 我事先将字符串设为小写
  • 提示:在字符类之外,^ 表示字符串的开始;内,它表示否定(例如^[brgpyo] vs [^brgpyo]
  • @orde 谢谢!它现在似乎工作了。

标签: python regex python-2.7


【解决方案1】:

在字符类之外,^ 表示字符串的开始;其中,^ 表示对字符类中的元素取反。例如:

import re

print(re.search("^[brgpyo]", "brgpyo"))
# <re.Match object; span=(0, 1), match='b'>
print(re.search("^[brgpyo]", "argpyo"))
# None
print(re.search("[^brgpyo]", "brgpyo"))
# None

【讨论】:

    【解决方案2】:
    import string 
    letters = set(string.ascii_letters) 
    chars = ['b','r','g','p','y','o']
    bad_chars = letters-set(chars) 
    if bad_chars in player_input_string: 
          return False
    

    使用这里的集合可以从另一个列表中减去列表。

    【讨论】:

      【解决方案3】:

      result = re.search('[^brgpyo]*', player_input_string) 如果结果: 返回错误

      【讨论】:

        【解决方案4】:

        您不必为此使用正则表达式。

        bad_chars = ['b','r','g','p','y','o']
        
        if bad_chars in player_input_string:
             return False
        

        【讨论】:

        • 我认为那些应该是好的字符。如果这些是字符串中唯一的字母,则该字符串很好
        • 这与提问者想要的完全相反。他想确保只有那些字符在字符串中。
        • 有没有办法做到这一点而不列出所有字符我想要的那些?
        • 是的,请在下面查看我的答案!
        【解决方案5】:

        如果玩家输入的字符串通过了下面的正则表达式,它满足你的要求:

        (?i:[brgpyo].*)
        

        此模式不区分大小写,只允许这些字母存在于输入字符串中。字母可以以任何顺序和任何频率出现。

        【讨论】:

        • Python re 不支持内联修饰符组。
        猜你喜欢
        • 1970-01-01
        • 2016-07-21
        • 1970-01-01
        • 2016-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        相关资源
        最近更新 更多