正则表达式匹配文本

时间:2011-01-21 12:22:51

标签: regex

我正在尝试创建一个正则表达式来匹配编号列表之间的内容,例如具有以下内容:

1)第1部分的文字 2)第2部分的文字 3)第3部分的文本

3 个答案:

答案 0 :(得分:2)

以下PCRE应该可以正常工作,假设你没有在章节中有任何格式化为“1)”之类的东西:

\d+\)\s*(.*?)\s*(?=\d+\)|$)

说明:

  • \d+\)会给出一个数字,然后是)
  • \s*匹配前面的空格。
  • (.*?)非贪婪地捕获内容。
  • \s*匹配尾随空格。
  • (?=\d+\)|$)确保匹配后跟新部分的开头或文本的结尾。

注意,它并不强制它们必须是升序或类似的东西,所以它也匹配以下文本:

4) Hello there 1) How are you? 5) Good.

答案 1 :(得分:0)

我建议如下(PCRE):

(?:\d+\)\s*(.*?))*$
  • 内部\d+\)\s*匹配列表编号和右括号,后跟可选的空格。

  • (.*?)匹配列表文本,但是以非贪婪的方式(否则,它也会匹配下一个列表项)。

  • 封闭的(?: )*$然后匹配上述零次或多次,直到输入结束。

答案 2 :(得分:0)

你应该记住数字后面的文字和括号可能是任何文字,这会找到你的子串:

\d\).+?(?=\d\)|$)

编辑:

要删除空格并仅返回没有数字的文本,请从以下匹配中获取组1:

\d\)\w*(.+?)(?=\d\)|$)

要获取组(1)中的数字和组(2)中的文本,请使用:

(\d)\)\w*(.+?)(?=\d\)|$)