通过正则表达式检索值时该值被截断

Posted

技术标签:

【中文标题】通过正则表达式检索值时该值被截断【英文标题】:The value is cut off while retrieving the value via regular expression 【发布时间】:2021-10-18 19:08:21 【问题描述】:

我正在尝试创建一个通用正则表达式,允许从以下字符串中获取数字值:

C1_S2_G11_SH2761 C1_S1_G789 C2_S2_SH6917 C1_S1_G78_G432
    public Regex testRegex = new Regex("^C(?<classId>\\d+)_S(?<segmentId>\\d+)_(G|SH)(?<groupShopId>\\d+)(|_|_G|_SH)(?<subGroupShopId>\\d+)$");

一旦我尝试从字符串 C2_S2_SH6917 中获取值:

var match = testRegex.Match(string)

var groupShopIdValue = match.Groups["groupShopId"].Value

它只返回 SH 691 之后的前三位数字,但我希望在 SH 6917

之后得到所有四位数字

【问题讨论】:

【参考方案1】:

你可以使用这个正则表达式:

^C(?<classId>\d+)_S(?<segmentId>\d+)_(?:G|SH)(?<groupShopId>\d+)(?:_(?:G?|SH)(?<subGroupShopId>\d+))?$

请参阅regex demo。最后一个 __G_SH 后跟数字现在是可选的。所有不必要的捕获组现在都是非捕获的,并且不会弄乱正则表达式匹配对象。

详情

^ - 字符串开头 C - 一个 C 字符 (?&lt;classId&gt;\d+) - 组“classId”:一位或多位数字 _S - _S 字符串 (?&lt;segmentId&gt;\d+) - 组“segmentId”:一位或多位数字 _ - 下划线 (?:G|SH) - GSH (?&lt;groupShopId&gt;\d+) - 组“groupShopId”:一位或多位数字 (?:_(?:G?|SH)(?&lt;subGroupShopId&gt;\d+))? - 可选序列 _(?:G?|SH) - _,然后是可选的 GSH (?&lt;subGroupShopId&gt;\d+) - 组“subGroupShopId”:一位或多位数字 $ - 字符串结束。

【讨论】:

【参考方案2】:

7 匹配为 subGroupShopId 的一部分。

【讨论】:

感谢@Kristof 的留言!如何更新正则表达式以避免这种分裂?

以上是关于通过正则表达式检索值时该值被截断的主要内容,如果未能解决你的问题,请参考以下文章

JS 正则表达式

RegExp正则表达式

使用正则表达式从对象中检索值 - JS [关闭]

正则表达式

如何修改一个正则表达式的匹配方式

正则表达式