首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复杂正则表达式,PEG,还是多次传递?

复杂正则表达式,PEG,还是多次传递?
EN

Stack Overflow用户
提问于 2015-09-23 20:50:17
回答 2查看 140关注 0票数 1

我试图从以下示例中提取一些数据:

  • 名称789,10厂12-27b
  • 制造商XY-2822,10轧机,17-25b
  • 其他制造商16b部件
  • 另一家制造商FER M9000,11磨,11-40
  • 18b部
  • 制造商11-31,10磨
  • 最大尺寸1x (34b),2x (38/24b)
  • 制造商REC6 15/18/26b。方块。
  • 生产者FC-40 11-13-16-19-22-25-27-30-34b

我希望我的结果分别是:

  • 12、27
  • 17、25
  • 16
  • 11、40
  • 18
  • 11-31
  • 34、38、24 (可选,只提供后两种罚款)
  • 15、18、26
  • 11、13、16、19、22、25、27、30、34

我很乐意多次使用表达式语法来完成这个任务,尽管我不认为这会有什么帮助。

我很难用看头和后面的查找来获取数据,并排除诸如“11磨”和"XY-2822“之类的东西。我发现发生的是,我可以排除那些比赛,但最终截断好的结果,为其他比赛。

做这件事最好的方法是什么?

我现在的正则表达式是/(?:(\d+)[b\b\/-])([b\d\b]*)[^a-z]/i

它捕获字母'b‘(没关系),但在最后一个示例中没有捕获34b。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-23 21:30:05

不确定确切的要求/格式是什么,但您可以尝试如下:

代码语言:javascript
运行
复制
/(?:\G(?!^)[-\/]|^(?:.*[^\d\/-])?)\K\d++(?![-\/]\D)/

http://rubular.com/r/WJqcCNe2pr

详情:

代码语言:javascript
运行
复制
# two possible starts:
(?: # next occurrences
    \G    # anchor for the position after the previous match
    (?!^) # not at the start of the line
    [-\/]
  | # first occurrence
    ^
    (?:.*[^\d\/-])? # (note the greedy quantifier here,
                    #  to obtain the last result of the line)
)

\K # discards characters matched before from the whole match
\d++ # several digits with a possessive quantifier to forbid backtracking
(?![-\/]\D) # not followed by an hyphen of a slash and a non-digit

如果将(?:.*[^\d\/-])?替换为[^-\d\/\n]*+(?>[-\d\/]+[^-\d\/\n]+)*,则可以改进模式(如果逐行工作,则删除\n )。此更改的目标是限制回溯(每一个原子组发生原子组,而不是在第一个版本中逐字符进行)。

也许,您可以用这种正的展望:(?=[-\/]\d|b|$)来代替负的展望

另一个版本的这里

票数 2
EN

Stack Overflow用户

发布于 2015-09-23 21:18:38

也许是这样:

代码语言:javascript
运行
复制
(?<=\d-)\d+|\d+(?=-\d+)|\d+(?=(?:\/\d+)*b)

https://regex101.com/r/nR3eS9/1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32749230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档