给出以下类型的字符串:
<#>“#First Thing ##Another One ## No Space#Main String #After Main #EndString#”我想提出一个正则表达式,它可以将#符号包围的所有文本作为匹配返回。给我带来悲伤的一件事是#符号既是开始和结束分隔符。我在正则表达式中的所有尝试都刚刚返回整个字符串。另一个问题是字符串的一部分可能不被#符号包围,如上面的子字符串“Main String”所示。有没有人有任何想法?我有点玩弄负面后瞻断言,但还没能让它发挥作用。在#的组之间可能存在或者可能没有空格但我想忽略它们(不匹配它们),如果存在的话。另一种选择是只编写一个字符串解析器例程,这很容易,但我更愿意使用正则表达式。
答案 0 :(得分:2)
/((#[^#]+#)|([^#]+))/
也许像上面这样的东西会匹配你想要的东西。
这将匹配两个哈希之间的空间。 HMM。
/((#[^#]+#)|([^#]*[^#\s]+[^#]*))/
我认为这将摆脱令人讨厌的空间。
答案 1 :(得分:1)
[编辑]
我认为这就是你所需要的:
(?<=#)[^#]+?(?=#)
输入#First Thing# #Another One##No Space# Main String #After Main#
匹配:
First Thing
Another One
No Space
Main String
After Main
第二个匹配是Thing#
和#Another
之间的空格。
[编辑]忽略空格:
(?<=)(?!\s+)[^#]+?(?=#)
如果你想忽略尾随空格:
(?<=)(?!\s+)[^#]+?(?=\s*#)
答案 2 :(得分:1)
试试这个。不应该捕获第一组和最后一组。*?应该懒惰
(?:#)(.*?)(?:#)
我认为这是你真正需要的:
((#[^#]+#)|([^#]*[^#\s]+[^#]*))
但它不会捕获#
Main String