首页 > 解决方案 > 有没有更简单的方法来查找字符串的正则表达式?

问题描述

我刚开始使用正则表达式,只是陷入了困境。我的字符串是:

ITEM DESCRIPTION:  KING AUTHUR 2LB FLOUR     PACK: 10                              SIZE: 0011.00 OZ

我需要获取“< >”中的部分:

ITEM DESCRIPTION:  <KING AUTHUR 2LB FLOUR>     PACK: <10>                              SIZE: <0011.00 OZ>

我试过了

: *([\w\.]+ ?[\w]* [\d\w]* *[\w]*)

这不是 100% 准确,感觉重复,当文本变长时也会变得乏味(多键:值)。

是否有一种通用的方法可以从长度不定的文本中获取 key:value 对中的所有值?如果我只想获得第一个密钥,为什么类似的东西(ITEM).*:不会停止ITEM DESCRIPTION:但一直选择?ITEM DESCRIPTION: ... SIZE:

标签: regex

解决方案


这是与 PCRE 兼容的正则表达式的一种方法:

:\s*\K.*?(?=\s*\w+:|$)

请参阅正则表达式演示。符合ECMAScript 2018+/.NET/Python PyPiregex的模式是

(?<=:\s*\b).*?(?=\s*\w+:|$)

请参阅此正则表达式演示

其余的,您可以依靠捕获:

:\s*(.*?)(?=\s*\w+:|$)

请参阅正则表达式演示

详情

  • :\s*- 一个冒号和零个或多个空格
  • \K- 匹配重置运算符,丢弃匹配内存缓冲区中匹配的整个文本
  • (?<=:\s*\b):- 与紧接在、零个或多个空格和单词边界之前的位置匹配的正向后视
  • .*?- 尽可能少的除换行符以外的任何零个或多个字符
  • (?=\s*\w+:|$)- 与字符串中的位置匹配的正向前瞻,该位置紧跟零个或多个空格、一个或多个单词字符,然后是冒号或字符串结尾。

推荐阅读