捕获分隔符之间的字符串

时间:2012-11-08 13:46:20

标签: regex groovy

在两个标记之间捕获字符串的最短解决方案是什么?

例如,让我们假设我有

  blahblahblah --- foobar-- blahblahblah

我想拍摄“foobar”。

我可以用正则表达式轻松捕捉字符串“--- foobar--”。

但由于我不想要前缀“---”和后缀“ - ”,我需要很多步骤来清理结果:

  1. 获取前缀“---”的位置(因为我们已经捕获了集团,我们知道该位置为0)
  2. 获取“---”的长度(为了举例,我们假设我们不知道限制器的大小,它可以是“---”或“ - ”或“ - ”)
  3. 从位置position_prefix + prefix_length
  4. 开始获取后缀“ - ”的位置
  5. position_prefix + prefix_length和position_suffix
  6. 之间的子串

    当然,如果我需要的话,我可以自己构建这样的功能,但是已经有了内置的解决方案吗?

    像captureWithoutDelimiters(group_regex,prefix_regex,suffix_regex)?

2 个答案:

答案 0 :(得分:3)

怎么样:

[\w\s]+-+(\w+)-+[\w\s]+

然后你可以打印出第一个捕获组捕获的内容。

说明:

[\w\s]+     // Match at lest 1 letter or white space character
-+          // Followed by at least 1 marker character
(\w+)       // Capture the word inside the markers
-+          // Followed by more marker characters
[\w\s]+     // Followed by at lest 1 letter/white space character

答案 1 :(得分:1)

最短解决方案可能是

.split("-+")[1]

如果您需要---作为前缀而--作为后缀,并且您在文本的任何位置都允许-,那么拆分解决方案

.split("---")[1].split("--")[0]

请参阅this demo