regex - 有没有更简单的方法来查找字符串的正则表达式?
问题描述
我刚开始使用正则表达式,只是陷入了困境。我的字符串是:
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:
解决方案
这是与 PCRE 兼容的正则表达式的一种方法:
:\s*\K.*?(?=\s*\w+:|$)
请参阅正则表达式演示。符合ECMAScript 2018+/.NET/Python PyPiregex
的模式是
(?<=:\s*\b).*?(?=\s*\w+:|$)
请参阅此正则表达式演示。
其余的,您可以依靠捕获:
:\s*(.*?)(?=\s*\w+:|$)
请参阅正则表达式演示。
详情:
:\s*
- 一个冒号和零个或多个空格\K
- 匹配重置运算符,丢弃匹配内存缓冲区中匹配的整个文本(?<=:\s*\b)
:
- 与紧接在、零个或多个空格和单词边界之前的位置匹配的正向后视.*?
- 尽可能少的除换行符以外的任何零个或多个字符(?=\s*\w+:|$)
- 与字符串中的位置匹配的正向前瞻,该位置紧跟零个或多个空格、一个或多个单词字符,然后是冒号或字符串结尾。
推荐阅读
- python - Meta 类中的“Verbose_name”和“Ordering”是什么?请解释一下django中的Meta Class
- ruby-on-rails - 运行测试时不断收到“打开的文件太多”
- javascript - serviceworker.js:1 Uncaught (in promise) TypeError: Request failed .Net Core 3.1
- c++ - 如何在多个函数中插入链表节点而不使用 C++ 中的全局变量?
- mysql - SQL 不显示重复项/仅显示最后一个值
- google-cloud-platform - 获取 openApi 规范中定义的自定义属性
- php - Symfony 5 - DateType::class 的约束
- javascript - 在 ReactJS 中做了一个
- string - 如何从我的日志文件中解析时间戳?
- docker - 如何从 Docker Hub 中删除存储库