【问题标题】:Python Regex to capture single character alphabeticalsPython Regex 捕获单个字符的字母
【发布时间】:2014-04-08 05:31:28
【问题描述】:

为什么下面的正则表达式不打印 True?

print re.compile(r'^\b[a-z]\b$').search('(s)')

我想匹配前后可能有非字母数字字符的单个字符字母,但在字符串中的任何位置都没有更多的字母数字字符。所以以下应该是匹配的:

'b'
'b)'
'(b)'
'b,

以下应该是遗漏的:

'b(s)'
'blah(b)'
'bb)'
'b-b'
'bb'

here 的解决方案不起作用。

【问题讨论】:

  • 这里有什么问题?不是已经可以了吗?
  • 抱歉 devnull,我输入的字符串有误。现在检查一下,它不起作用。
  • 不起作用是什么意思?您正在放置锚以确保输入为 1 个字符,它如何匹配更大的字符串?
  • 我想我误解了 ^ 和 $ 的意思。我希望它开始查看字符串的开头为 \b,然后找到 [a-z],然后是 \b,紧接着是字符串的结尾。
  • @user2104778 您尝试匹配的实际模式是什么?

标签: python regex alpha


【解决方案1】:

开头的^ 和结尾的$ 仅当整个字符串 是单个字符时才导致表达式匹配。 (因此,它们使每个 \b 都过时了。)删除锚以匹配更大的字符串:

print re.compile(r'\b[a-z]\b').search('b(s)')

或者,确保只有一个字符,例如:

print re.compile(r'^\W*[a-z]\W*$').match('b(s)')

请注意,在第一种情况下,'b-b''blah(b)' 将匹配,因为它们包含单个字母字符而不会触及其中的其他字符。在第二种情况下,'b(s)' 将不匹配,因为它包含两个字母字符,但其他四种情况会正确匹配,并且所有不匹配的情况都会按预期返回 None(假逻辑值)。

【讨论】:

  • 我很抱歉,但我意识到我问的与我想要的相反。我不想匹配'b(s)',但我确实想匹配'(s)'。查看更新的问题。
【解决方案2】:

好的,答案如下:

print re.compile(^[(,\[]?[a-z][),;\]]?[,;]?$).search('(s)')

它可以捕获单字符字母数字的各种复杂模式。我意识到这与我要求的不同,但实际上效果更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2015-12-26
    • 2019-10-10
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多