首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正在尝试匹配文本中的'#‘

正在尝试匹配文本中的'#‘
EN

Stack Overflow用户
提问于 2010-06-30 23:41:29
回答 2查看 122关注 0票数 1

当且仅当"#“前面有换行符、空格或字符串中的第一个字符时,我才会尝试匹配”#“后跟字母。前两个我已经完成了,但是如果它是字符串中的第一个字符,我就很难匹配。我正在尝试找到'\A‘的用法,但仅仅将它添加到包含换行符和空格的类中是行不通的。我错过了什么?

到目前为止,我想出的正则表达式是:

代码语言:javascript
运行
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-01 02:46:09

我想这就是你要找的:

代码语言:javascript
运行
复制
result = re.findall("(?:^|\s)(#[a-zA-Z]+)", text, re.MULTILINE)

(?:^|\s)是一组非分组括号(我们不希望在结果中包含此部分)。使用multiline标志,它将匹配字符串的开头,或者前面的换行符或空格。下一组是你的“标签”,我相信。如果它不是跟在#后面的字母,你将不得不处理第二组。

票数 2
EN

Stack Overflow用户

发布于 2010-06-30 23:53:18

打开多行标志,以便^匹配换行符之后的位置,然后只需使用:

代码语言:javascript
运行
复制
re.compile(r"(?m)^\s*#") # includes the flag for multi-line

代码语言:javascript
运行
复制
re.compile(r"(?m)^\s*#.*$")

获取整行(禁用了点匹配换行符模式)。

对于“字符串中的第一个字符”,这取决于字符串的定义-您可能需要使用完整的解析器,而不是单个正则表达式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3150899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档