0

下午好。我是一名 VB.Net 程序员,尽一切努力在我的应用程序中实现正则表达式。我选择 regex 而不是 Net 方法,因为熟能生巧。这只是为了我的正则表达式知识的好处。

以这样的字符串为例,忽略引号。“:1Af404080A83hfndsgt4u47”,我正在查看的字符串部分是这8个值。“04080A83” 这些可以改变。价值观不重要,重要的是立场。从 0 开始,第一个字符位置将是 5 到 12。我知道我们可以匹配任何字符直到 {5},但可以替换一个范围。示例 {5,12}。最终输出将是 "":1Af4Hello123hfndsgt4u47"" Hello123

感谢您的时间。就像我为我自己的贝尼塔所说的那样,这可能是不可能的。

4

4 回答 4

1

为什么需要正则表达式来替换 a 中的范围string?字符串方法更有效并且通常更具可读性。

string input = ":1Af404080A83hfndsgt4u47";
string replace = "Hello123";
int start = 5;
string result = "";
if (input.Length >= start)
{
    result = input.Substring(0, start) + replace + input.Substring(start + replace.Length);
    Console.Write(result);
}

Demo

VB.NET:

Dim input As String = ":1Af404080A83hfndsgt4u47"
Dim replace As String = "Hello123"
Dim start As Integer = 5
Dim result As String = ""
If input.Length >= start Then
    result = input.Substring(0, start) & replace & input.Substring(start + replace.Length)
    Console.Write(result)
End If
于 2013-08-22T12:32:01.447 回答
1

您可以使用lookbehind确保跳过前五个字符(?<=^.{5}),然后您可以简单地将8 个字符与 匹配.{8},您可以将其替换为您喜欢的任何字符。

result = Regex.Replace(input, "(?<=^.{5}).{8}", "Hello123")

工作演示。

于 2013-08-22T12:35:18.857 回答
0

我不完全确定你的意思

我知道我们可以匹配 {5} 之前的任何字符,但可以替换一个范围。示例 {5,12}。

但是这个正则表达式应该足以满足您的需求。

(?<=^(\w{4}))\w{8}
于 2013-08-22T12:33:51.803 回答
0

使用正则表达式执行此操作的方法如下:

Dim regex As Regex = new Regex("(.{5}).{8}(.*)")
Console.WriteLine(regex.Replace(":1Af404080A83hfndsgt4u47", "$1Hello123$2"))

另请参阅: 执行 Regex.Replace() 时如何使用命名组 如何使用 RegEx 替换命名组

于 2013-08-22T12:36:22.677 回答