首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式:长度未知的节名?

正则表达式:长度未知的节名?
EN

Stack Overflow用户
提问于 2012-07-17 02:11:31
回答 3查看 1.2K关注 0票数 2

我有一个文本块,格式如下:

1.2.3.4.51.2222.3.4.511.2

未知数量的数字和点(法律文件的部分)

如何将整个部分(1.2.3.4.5)捕获到一个组中?

我使用C#,但是任何正则表达式都可以,aI可以翻译它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-17 02:22:36

已更新

使用此Regex

代码语言:javascript
运行
复制
Regex.Matches(inputString, @"\d[\.\d]*(?<!\.)");

解释:

代码语言:javascript
运行
复制
\d                       digits (0-9)

[.\d]*                   any character of: '.', digits (0-9) 
                         (0 or more times, matching the most amount possible))

(?<! subexpression)      Zero-width negative lookbehind assertion.
票数 4
EN

Stack Overflow用户

发布于 2012-07-17 02:29:35

代码语言:javascript
运行
复制
string s = "1.2.3.4.5 or 1.2222.3.4.5 or 1 or 1.2 or 2222.3333.111.5 etc";
var matches = Regex.Matches(s, @"\d+(\.\d+)*").Cast<Match>()
    .Select(m => m.Value)
    .ToArray();
票数 4
EN

Stack Overflow用户

发布于 2012-07-17 02:14:22

好吧,如果你知道你不能超过5,那么你可以

代码语言:javascript
运行
复制
@"1+((.2+)((.3+)((.4+)(.5+)?)?)?)?"

您可以对每个符号的模式进行扩展,直到扩展到有限数量的符号

+表示符号的任意出现次数,但至少为1。如果0有效,则可以改用*

如果您不希望捕获模式,请将?:放在左括号后面,例如:(?:abc)

我省略了它们,以使正则表达式更具可读性。

那个?在括号后,表示前面符号的1或0。

现在,如果你不知道你的字符串能走多远,例如

"1.2.3.4......252525.262626.272727.......n.n.n"比我的直觉告诉我,你不能用正则表达式做到这一点。

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

https://stackoverflow.com/questions/11510044

复制
相关文章

相似问题

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