考虑以下字符串
'#PI + #C + 1.2'
我试图在哈希之后得到每个单词,但也忽略结果中的哈希
我用
#(\S+)
这很好,但我不确定如何确保散列在那里但在结果中忽略它
答案 0 :(得分:1)
我认为你的答案是有效的,这就是我要做的事情:
#([^\s]+)\s*
读起来像:匹配"#",然后将所有非空间字符捕获到第一个捕获组中(必须至少有一个非空格)字符)。之后,匹配任意数量的空格。
整个reg-ex不会匹配"或评价为真,除非"#"在一堆非空白字符之前找到。
显然,如果您保证使用#XXX + #YYY + CCC
格式,您可以构建一个更具针对性的注册表,以便在正确的捕获组中选择适当的值。
修改强>
只是注意到你说过#34;#显示在结果","结果"什么?通常,正则表达式匹配对象将返回整个匹配的字符串,如果您希望获取(...)
的内容 - 您将必须访问匹配的正则表达式的相应捕获组。这是非常依赖语言的。在python中你可以这样做:
re_SOMETHING = re.compile("#([^\s]+)\s*", ...)
match = re_SOMETHING.match("#PI + #C + 1.2")
if match:
pi = match.group(1)
# pi === "PI"
答案 1 :(得分:1)
我不知道你在结果中忽略#的确切含义。你的正则表达式正是这样做的。它匹配#以确保它在那里,然后只捕获它后面的东西。如果您不希望#匹配,则必须使用零宽度断言或环顾四周:
(?<=#)(\S+)