【发布时间】:2015-07-28 13:30:02
【问题描述】:
我目前正在尝试使用带有正则表达式的 excel 和 VBA 拆分数据行以匹配模式。我的所有数据都在一列中,每一行都需要分成 3 部分。
我的问题与正则表达式的使用有关,以及术语彼此之间的确切工作方式以及导致使用下一个术语的原因。
例如,我有一行写着:
"([A-Z]{3})(\W{5,})(.+)(\|\d\.\d)"
我是否应该将其读作“任何 3 个大写字母后跟至少 5 个非单词字符,然后将所有内容不超过,包括条形数字点条(不再赘述)”?还是 .+ 会一直蔓延到我的数据末尾,直到遇到换行符?
我想我想知道一个新术语是否会打断前一个术语(例如使用 .+ 直到上面的“|digit.digit”)。
如果能帮我解决这个问题,我们将不胜感激,在此先感谢您。
编辑:示例
ABC|^-\%!lkaddghlk shfdahah|$^~436346dghdhg|^dgf^356||P|7.7XYZ~^!HYU52
这个只能抓拍吗
ABC|^-\%!lkaddghlk shfdahah|$^~436346dghdhg|^dgf^356||P|7.7
因为最后一项是 |digit.digit 还是会因为 .+ 在第三个捕获组中捕获所有内容?
编辑:
感谢cmets中的每一个人,你们的反馈真的帮了我很大的忙!
【问题讨论】:
-
关于 Excel 和 VBA 中的正则表达式的最佳帖子:stackoverflow.com/questions/22542834/…
-
这是一个简洁的小工具,感谢分享。因此,对于第 4 个捕获组是否会中断第 3 个捕获组,我仍然有点不稳定。根据 regex101,我看起来会这样,这是真的吗?
-
您要解决的具体问题是什么?发布代码、示例输入和预期输出。我们检查您的意思的 regex101 小提琴在哪里?
-
对不起,我上面的评论是针对不再可见的评论,但这里是 regex101 regex101.com/r/uD4uJ0/1 并且原始帖子已更新。
-
我不太明白,但是只捕获...因为最后一个词是|digit.digit。
.+将尽可能多地吃掉 greedily 直到满足你的模式的(\|\d\.\d)部分(这当然是成功匹配所必需的)。