当且仅当"#“前面有换行符、空格或字符串中的第一个字符时,我才会尝试匹配”#“后跟字母。前两个我已经完成了,但是如果它是字符串中的第一个字符,我就很难匹配。我正在尝试找到'\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)发布于 2010-07-01 02:46:09
我想这就是你要找的:
result = re.findall("(?:^|\s)(#[a-zA-Z]+)", text, re.MULTILINE)(?:^|\s)是一组非分组括号(我们不希望在结果中包含此部分)。使用multiline标志,它将匹配字符串的开头,或者前面的换行符或空格。下一组是你的“标签”,我相信。如果它不是跟在#后面的字母,你将不得不处理第二组。
发布于 2010-06-30 23:53:18
打开多行标志,以便^匹配换行符之后的位置,然后只需使用:
re.compile(r"(?m)^\s*#") # includes the flag for multi-line或
re.compile(r"(?m)^\s*#.*$")获取整行(禁用了点匹配换行符模式)。
对于“字符串中的第一个字符”,这取决于字符串的定义-您可能需要使用完整的解析器,而不是单个正则表达式。
https://stackoverflow.com/questions/3150899
复制相似问题