1

给定以下类型的字符串:

“#First Thing# #Another One##No Space# Main String #After Main# #EndString#”

我想提出一个正则表达式,它可以返回所有被 # 符号包围的文本作为匹配项。让我感到悲伤的一件事是 # 符号既是开始分隔符又是结束分隔符。我对正则表达式的所有尝试都刚刚返回了整个字符串。另一个问题是部分字符串可能没有被# 符号包围,如上面的子字符串“主字符串”所示。有没有人有任何想法?我已经玩弄了一些负面的后视断言,但无法让它发挥作用。# 组之间可能有也可能没有空格,但如果有的话,我想忽略它们(不匹配它们)。另一种选择是只编写一个字符串解析器例程,这相当容易,但如果可能的话,我更喜欢使用正则表达式。

4

3 回答 3

2
/((#[^#]+#)|([^#]+))/

也许像上面这样的东西会符合你想要的。

这将匹配两个哈希之间的空间。唔。

/((#[^#]+#)|([^#]*[^#\s]+[^#]*))/

我认为这将摆脱令人讨厌的空间。

于 2011-06-17T03:02:33.157 回答
1

尝试这个。不应捕获第一组和最后一组,并且 .*? 应该偷懒

(?:#)(.*?)(?:#)

我认为这是您真正需要的:

((#[^#]+#)|([^#]*[^#\s]+[^#]*))

但它不会捕捉到#周围的Main String

于 2011-06-17T03:01:29.680 回答
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*#)
于 2011-06-17T02:57:14.033 回答