想象一下,用户正在多台计算机中插入字符串。
在一台计算机上,配置中的模式将提取该字符串的一些字符,比如说位置4到5。 在另一台计算机上,提取模式将返回其他字符,例如,字符串的最后3个位置。
这些配置(正则表达式模式)对于每台计算机都是不同的,管理员可以更改这些配置,而无需更改源代码。
一些例子:
Original_String Return_Value
User1 - abcd78defg123 78
User2 - abcd78defg123 78g1
User3 - mm127788abcd 12
User4 - 123456pp12asd ppsd
可以用正则表达式完成吗? 感谢。
答案 0 :(得分:7)
为什么要使用正则表达式?有什么问题:
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);
答案 1 :(得分:3)
如果你真的想使用正则表达式:
^...(..)
和
.*(...)$
答案 2 :(得分:1)
我不确定您希望通过使用RegEx获得什么。 RegEx用于模式匹配。如果你想根据位置提取,只需使用子串。
答案 3 :(得分:1)
在我看来,Regex真的不是这里的解决方案。要返回从位置 pos (从0开始)和长度 length 开始的字符串部分,只需调用Substring函数:
string section = str.Substring(pos, length)
答案 4 :(得分:1)
分组。您可以在/^.{3}(.{2})/上匹配,然后查看组$ 1。
问题是为什么?正常的字符串处理,即实际的子字符串方法在意图上会更快更清晰。
答案 5 :(得分:1)
要获得正则表达式捕获值以供进一步使用,您通常使用(),具体取决于它可能是()或Microsoft MSVC,我认为它是[]
示例
User4 - 123456pp12asd ppsd
最有趣的是你有2个单独的捕获区域。是否有关于如何将它们连接在一起的默认规则,或者您是否希望能够指定如何生成结果?
也许像
r/......(..)...(..)/\1\2/ for ppsd
r/......(..)...(..)/\2-\1/ for sd-pp
你想运行一个正则表达式来获取捕获并自己处理它们,还是想运行更高级的操作命令?