regex - 隔离以各种方式编写的大小,同时将其保持在第 1 组中
问题描述
当我有多种尺寸时,Wiktor 帮助我隔离值:
(?i)([a-z\d]+(?:[/-][a-z\d]+)?)[/-]([a-z\d]+(?:[/-][a-z\d]+)?)
但是我无法研究它如何处理单一尺寸
测试用例:
S1 - XXS/XS-S/M
S1 - 40-42-36-38
XXS/XS
40-42
40
通过上述示例,我可以匹配所有相关尺寸,但不能匹配最后一个“40”
如果它是一个单一的值,我怎么能考虑抓住这个值。但是,目前看来这不可行。
所以我一直想知道是否有可能抓住高亮的,这样我总是能得到第 1 组中第一个尺寸的结果
S1 - XXS/XS -S/M
S1 - 40-42 -36-38
XXS /XS
40 -42
40
所需值以粗体突出显示。
几乎我只需要确保最后我有两个结果可以展示每种尺寸 - 无论前面是什么都无所谓!
真的希望有人能在正确的道路上帮助我 - 尺寸总是用 - 或 / 或“ - ”和“ / ”分隔
解决方案
如果您的字符串应该从字符串的开头匹配,一个选项可能是使用锚来断言字符串的开头。
(?i)^(?:[a-z]+\d*(?:\s*-\s*[a-z\d]+[/-][a-z\d]+)?|\d+)\b
(?i)
不区分大小写匹配的内联修饰符^
字符串的开始(?:
非捕获组[a-z]+\d*
匹配 1+ 个字符 az 和可选数字(?:
非捕获组\s*-\s*
-
可选空白字符之间的匹配[a-z\d]+[/-][a-z\d]+
匹配字符 az 或数字中的一个-
或之间/
)?
关闭组并使其可选|
或者\d+
匹配 1+ 个数字
)\b
关闭非捕获组和单词边界以防止部分匹配
如果支持环视,另一个想法是在左侧使用单词边界并隔离您要匹配的特定部分
(?i)\b(?:[a-z]\d\s*[-/]\s*(?:[a-z\d]+[/-][a-z\d]+)|(?<!-)(?:[a-z]+(?=/)|\d+))\b
或者使用捕获组捕获您想要的内容,并匹配可选的非空白字符以防止给定示例的部分匹配。
(?i)\b([a-z\d]+(?:\s*-\s*[a-z\d]+[/-][a-z\d]+)?)\S*
推荐阅读
- python - Tkinter 为子进程(子进程)提供输入
- c++ - 使 exp() 处理较大的负值,Rcpp
- regression - 如果存在主效应和交互效应,解释整体效应?
- python - 如何在 python 中使用 selenium 从动态 url 中获取数据字段
- javascript - 将函数“generateToken”导入Node js中的中间件时出错
- python - Python包探索(urllib)(Windows)(Python3.9.6)
- docker - Intellij Docker 调试器挂起并显示消息“警告:验证自动检测到的连接”
- python - 为 DataFrame 重塑数组
- c# - 如何在 LINQ to Entity Select tag {} 中使用 Join 和 count?
- python - Python aiohttp ClientSession 请求内存泄漏?