【问题标题】:Not being able to detect '-' character in regular expression [duplicate]无法检测正则表达式中的“-”字符[重复]
【发布时间】:2018-12-10 15:11:03
【问题描述】:

我正在尝试测试一个字符是否是特殊字符。

当我编写以下代码时,'-' 字符失败:

import re

s = '-'
regex = re.compile('[!@#$%^&*()-+]')

if regex.search(s) == None:
    print("Not found")
else:
    print("Found")

输出>>未找到

但是,如果我将模式中“-”字符的位置更改如下(代码第 3 行),它可以正常工作

import re 

s = '-'
regex = re.compile('[!@#$%^&*()+-]')

if regex.search(s) == None:
    print("Not found")
else:
    print("Found")

输出>>找到

造成这种差异的原因是什么?如何确保检测到这些字符?

【问题讨论】:

  • 我给你一个提示:看看字符类[a-z]中的字符。长度超过三个字符!
  • 尝试转义字符,如 re.compile('[\-]')
  • 知道了。它应该是范围内的第一个或最后一个字符。也适用于转义字符:regex = re.compile('[!@#$%^&*()\-+]')。谢谢!
  • 您好,请看一下我标记的两个问题。这是以前被问过的一个常见问题。如果他们没有解决您的问题,请在您的问题中添加更多详细信息。

标签: python regex


【解决方案1】:

- 被视为特殊字符如果它不是范围内的最后一个或第一个字符,并且没有转义。所以:

  • [-19] or [19-] or [1\-9]-, 1 or 9, 但是
  • [1-9] 介于 19 之间,包括 - 本身。

【讨论】:

  • From the docs: "字符范围可以通过给出两个字符并用'-'分隔来表示,例如[a-z]将匹配任何小写ASCII字母,[0-5][0-9]将匹配从0059[0-9A-Fa-f] 的所有两位数字将匹配任何十六进制数字。如果- 被转义(例如[a\-z])或者如果它被放置为第一个或最后一个字符(例如@ 987654341@ 或 [a-]),它将匹配文字 '-'。"
【解决方案2】:

'-' 在 Regex 中表示介于两者之间。 所以第一个表达式说

regex = re.compile('[!@#$%^&*()-+]')

匹配 ')' 和 '+' 之间的字符

https://docs.python.org/2/library/re.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    相关资源
    最近更新 更多