[英]Extract substring from string with Regex
想象一下,用户正在多台计算机中插入字符串。
在一台计算机上,配置中的模式将提取该字符串的一些字符,例如 position 4 到 5。在另一台计算机上,提取模式将返回其他字符,例如字符串的最后 3 个位置。
这些配置(Regex 模式)对于每台计算机都是不同的,管理员应该可以更改,而无需更改源代码。
一些例子:
Original_String Return_Value
User1 - abcd78defg123 78
User2 - abcd78defg123 78g1
User3 - mm127788abcd 12
User4 - 123456pp12asd ppsd
可以用正则表达式完成吗? 谢谢。
为什么要为此使用正则表达式? 出什么问题了:
string foo = s.Substring(4,2);
string bar = s.Substring(s.Length-3,3);
(您可以将它们包装起来以轻松地对长度进行一些边界检查)
如果你真的想要,你可以把它包装在一个Func<string,string>
放在某个地方 - 不过我不确定我会打扰:
Func<string, string> get4and5 = s => s.Substring(4, 2);
Func<string,string> getLast3 = s => s.Substring(s.Length - 3, 3);
string value = "abcd78defg123";
string foo = getLast3(value);
string bar = get4and5(value);
如果你真的想使用正则表达式:
^...(..)
和:
.*(...)$
我不确定您希望通过使用 RegEx 获得什么。 RegEx 用于模式匹配。 如果要基于 position 提取,只需使用 substring。
在我看来,Regex 真的不是这里的解决方案。 要返回从 position pos (从 0 开始)且长度为length的字符串部分,您只需调用 Substring function 如下:
string section = str.Substring(pos, length)
分组。 您可以在 /^.{3}(.{2})/ 上进行匹配,然后查看 $1 组。
问题是为什么? 正常的字符串处理,即实际的 substring 方法将更快、更清晰。
要让正则表达式捕获值以供进一步使用,您通常使用 (),这取决于正则表达式编译器它可能是 () 或对于 microsoft MSVC,我认为它是 []
例子
User4 - 123456pp12asd ppsd
最有趣的是,这里有 2 个单独的捕获区域。 是否有一些关于如何将它们连接在一起的默认规则,或者您是否希望能够指定如何生成结果?
也许像
r/......(..)...(..)/\1\2/ for ppsd
r/......(..)...(..)/\2-\1/ for sd-pp
你想运行一个正则表达式来获取捕获并自己处理它们,还是你想运行更高级的操作命令?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.