通过正则表达式检索值时该值被截断
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_G432public 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
字符
(?<classId>\d+)
- 组“classId”:一位或多位数字
_S
- _S
字符串
(?<segmentId>\d+)
- 组“segmentId”:一位或多位数字
_
- 下划线
(?:G|SH)
- G
或 SH
(?<groupShopId>\d+)
- 组“groupShopId”:一位或多位数字
(?:_(?:G?|SH)(?<subGroupShopId>\d+))?
- 可选序列
_(?:G?|SH)
- _
,然后是可选的 G
或 SH
(?<subGroupShopId>\d+)
- 组“subGroupShopId”:一位或多位数字
$
- 字符串结束。
【讨论】:
【参考方案2】:7 匹配为 subGroupShopId 的一部分。
【讨论】:
感谢@Kristof 的留言!如何更新正则表达式以避免这种分裂?以上是关于通过正则表达式检索值时该值被截断的主要内容,如果未能解决你的问题,请参考以下文章