1.正则表达式使用基础:字符组(二)

1.3 排除型字符组

  1. 在方括号[………]中列出希望匹配的所有字符,这种字符组可以叫做"普通字符组"。它的确比较方便,不过,对于有些问题是普通字符组不能解决的。
    问:第一个字符不是数字字符,第二个字符才是数字字符(比如A8、P8),应当如何比较方便的处理呢?数字字符的匹配简单,用上一节讲的[0-9]即可;不是数字就比较难办了,如果采用正向逻辑,就需要列出所有非数字的字符,这实在太多了,全部列出基本上不可能,此时就可以使用排除型字符组。

  2. 排除型字符组(Negated Character Class) 非常类似普通字符组,只是在开方括号后紧跟一个 脱字符 ^ ,写作 [^……],表示在当前位置,匹配一个没有列出的字符。例如 [^0-9]表示的意思就是 0~9之外的字符,也就是 非数字字符。那么我们上面的问题也就迎刃而解了。 [^0-9][0-9] 便能匹配出 A8、P8等字符串了。

  3. 排除型字符组的描述是在当前位置,匹配一个没有列出的字符。也就是说排除型字符必须匹配一个字符,如果没有还是不得行哦。

re.search(r"^[^0-9][0-9]", "A8")  != None  # => True
re.search(r"^[^0-9][0-9]", "8")  != None  # => False
  1. 除了开方括号 [ 之后的 ^ ,排除型字符组的用法和普通字符组基本上一样,唯一需要改动的是,在排除型字符组中,如果需要表示横线 - ,那么 - 应该紧跟在 ^ 之后。
re.search(r"^[^-0-9]", "-") !=None # => True  

1.4 字符组简记法

  1. 这个就是 [0-9] ,[A-Z] 这类字符组的简写法。
  • \d 等价于 [0-9] d代表数字 digit

  • \w 等价于 [0-9a-zA-Z] w代表数字 word

  • \s等价于 [\t\r\n\v\f] s代表空白字符 space

  1. 字符组简记法可以单独出现1,也可以使用在字符组中,比如 [0-9a-zA-Z] 也可以写作 [\da-zA-Z],[^0-9] 也可也写成 [^\d]。

  2. \d、\w、\s 这三个普通字符组简记法正则表达式也提供了对应排除型字符组的简记法:\D、\W、\S,字母完全一致,只是改为大写。这些简记法是互补的:\s 能匹配的字符,\S 一定不能匹配,同理 \w、\d。[\s\S] [\w\W] [\d\D] 匹配任意字符, "." 号虽然能匹配任意字符,但点号不能匹配换行符。

1.5 字符组运算

  1. .NET、Java、Object-C 提供了字符组运算的功能,可以在字符组内进行集合运算。例如要匹配所有元音字母(暂只考虑小写字母),可以使用 [aeiou]。如果要匹配所有辅音字母,可以使用 [b-df-hj-np-tv-z] ,但是这样写比较复杂,可以换个角度,从26个字母中减去元音字母(差集),剩下的就是辅音字母。

    JAVA: [[a-z]&&[aeiou]],[a-z] 表示 a~z的所有小写字母, [^aeiou] 表示除元音字母外的所有字符,包括大写字母、数字、各种符号,两者作取交集,即可得到元音字母。

    .NET:[a-z-[aeiou]]

  2. POSIX字符组
    某些文档中,可能会发现 类似 [:digit:]、[:lower:] 之类的字符组。上文介绍的字符组,都舜宇Perl衍生出来的正则表达式流派,这个流派叫做 PCRE 。除此之外,还有其他流派,比如 POSIX,它是一系列的规范,定义了UNIX操作系统应当支持的功能,其中自然也包含了正则表达式的规范, [:digit:] 之类的字符组就遵循 POSIX 内正则表达式的字符组。
    如果只使用普通编程语言,可以不考虑POSIX字符组,如果想了解,可以在Linux中使用 Grep工具尝试下。这里笔者不在赘述了,非本文讲解重点。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容