正则表达式麻烦

时间:2011-06-17 02:54:42

标签: regex string string-parsing

给出以下类型的字符串:

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

我想提出一个正则表达式,它可以将#符号包围的所有文本作为匹配返回。给我带来悲伤的一件事是#符号既是开始和结束分隔符。我在正则表达式中的所有尝试都刚刚返回整个字符串。另一个问题是字符串的一部分可能不被#符号包围,如上面的子字符串“Main String”所示。有没有人有任何想法?我有点玩弄负面后瞻断言,但还没能让它发挥作用。在#的组之间可能存在或者可能没有空格但我想忽略它们(不匹配它们),如果存在的话。另一种选择是只编写一个字符串解析器例程,这很容易,但我更愿意使用正则表达式。

3 个答案:

答案 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