我试图匹配后跟字母的“#”,当且仅当它的前面是换行符,空格或字符串中的第一个字符时。前两个我已经完成了,但如果它是字符串中的第一个字符,我会很难匹配。我试图找到'\ A'的用法,但它不能将它添加到包含换行符和空白符的类中。我错过了什么?尝试匹配文本中的'#'
正则表达式我已经想出到目前为止是:
from re import findall, escape
from string import punctuation, whitespace
NEWLINE = """\r\n?|\n"""
INVALID_TAG_CHARACTERS = escape(punctuation.replace('-', '').replace('_', '') + whitespace)
VALID_TAGS = r'[\s%s]+#[^%s]+' % (NEWLINE, INVALID_TAG_CHARACTERS)
tags = findall(VALID_TAGS, text)
这就像一个魅力,谢谢你! :-) 虽然我不得不将其更改为“(?:^ | \ s)(#[^%s] +)%INVALID_TAG_CHARACTERS”。 – MdaG 2010-07-01 07:23:12
@MdaG,你可能想使用're.escape(INVALID_TAG_CHARACTERS)'来确保你不会意外地在你的模式中注入正则表达式特殊字符。 – 2010-07-30 13:34:02
是不是原来的帖子逃脱不够? (即,' - ','')。替换('_','')+空格) – MdaG 2010-08-09 11:47:34