我的要求是从给予者字符串中获得精确的 8 位数字。
让我给你举个例子。
000012345678000 : 这是不允许的,因为它有超过 8 位数字。所以不应提取“12345678”
0000 12345678 000:这是允许的,因为 8 位是分开的。
简而言之,允许使用单独的 8 位数字。不应该在任何数字之内。
我试过了。
\s{1,}\d{8}\s{1,}但只允许 8 位数字,两边有空格。
你能帮我么。提前致谢
该\s{1,}\d{8}\s{1,}模式确实仅在空格之间匹配,因为\s{1,}(等于\s+)匹配 1 个或多个空格字符。
您可以使用环视来匹配未包含在其他数字中的数字序列:
(?<!\d)\d{8}(?!\d)
Run Code Online (Sandbox Code Playgroud)
查看正则表达式演示
图案详情
(?<!\d) - 如果当前位置左侧有一个数字,则匹配失败的负向后视\d{8} - 8 位数字(?!\d)- 如果当前位置右侧有一个数字,则匹配失败的负前瞻。在 C# 中,使用以下代码获取所有匹配项:
var results = Regex.Matches(s, @"(?<!\d)\d{8}(?!\d)", RegexOptions.ECMAScript)
.Cast<Match>()
.Select(m => m.Value)
.ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,该RegexOptions.ECMAScript选项\d只会匹配 ASCII 数字。
词边界注意:您可以考虑词边界\b而不是环顾,但有一个问题。如果需要从_12345678_字符串中提取 8 位数字,则不能使用\b\d{8}\b模式。如果您希望此匹配失败,您可以使用\b\d{8}\b.
| 归档时间: |
|
| 查看次数: |
1726 次 |
| 最近记录: |