如何在java中的花括号之前提取花括号和50个单词之间的数字?

时间:2015-01-18 13:13:53

标签: java regex

我必须在花括号之前提取方括号和50个单词之间的数字。

Input     I am very much new to java...[1] and i want to know....[1-2] more.   
          I am
          a student..[3]

output    [1]  I am very much new to java...
          [1-2] and i want to know...
          [3] I am a student...

    please help me.

2 个答案:

答案 0 :(得分:0)

这听起来很像家庭作业,我不想为你解决。但这是一般的想法:

  1. 使用正则表达式查找所有[bracket expressions]
  2. 现在您知道每个括号表达式的位置,您还可以在每个括号表达式和前一个括号表达式之间提取文本(如果它是第一个括号表达式,则提取字符串的开头)。
  3. 对于每个文本字符串,使用正则表达式查找所有单词(我假设"单词"是一堆单词字符,它们全部在一起)。这又是一个非常简单的正则表达式。
  4. 现在你知道文本字符串中所有单词的位置,找到距离结尾的第50个(或者,如果没有这么多的单词,那么第一个单词)。复制从该单词开始并以括号表达式结束的文本部分。
  5. 有任何问题吗? :)

答案 1 :(得分:0)

您可以使用正则表达式

((?:\w+\W*?){0,50}?)\[([\d-]+)\]

它捕获捕获组2中方括号中的数字,以及捕获组1中前面的文本。

regex101 demo.


(  // first capture group
    (?:
        \w+ // consume a sequence of word characters
        \W*? // and any following non-word characters, if any
    ){0,50}? // up to 50 words, as few as possible.
)
\[ // a square opening bracket
( // second capture group
    [\d-]+ // a sequence of digits and dashes
)
\] // a square closing bracket