Regex.将字符位置替换为另一个字符位置

Regex.将字符位置替换为另一个字符位置,regex,vb.net,Regex,Vb.net,下午好。我是一名VB.Net程序员,曾尽一切努力在我的应用程序中实现正则表达式。我选择regex而不是Net方法,因为熟能生巧。这只是为了我的regex知识利益 以这样的字符串为例,忽略引号。“:1Af404080A83hfndsgt4u47”,我看到的字符串部分是这8个值。“04080A83”这些可以更改。价值不重要,重要的是位置。从0开始,第一个字符位置将为5到12。我知道在{5}之前我们可以匹配任何字符,但是可以替换一个范围。例{5,12}。最终输出为“”:1Af4Hello123hfnd

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

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


谢谢你抽出时间。这可能不可能像我为我自己的Benita所说的那样。

为什么需要正则表达式来替换
字符串中的一个范围?字符串方法效率更高,而且通常可读性更强

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);
}

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

我不太清楚你说的是什么意思

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

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

(?<=^(\w{4}))\w{8}

(?您可以使用确保跳过前五个字符
(?使用正则表达式执行此操作的方法如下:

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

试着发布你的一些尝试……你永远不知道你可能已经接近了。我希望你明白,有很多比使用正则表达式简单得多的方法。好吧,他说他使用正则表达式学习正则表达式。这显然不是生产代码。@m.buettner:我忽略了这一点。我已经用Visual Basic编程十多年了。我非常高兴非常清楚如何通过子字符串来实现这一点。正如我在最初的帖子中所说的,我正在尽可能地使用正则表达式,即使这样做没有任何意义。这都是关于我个人的学习。但是无论如何,
^
需要进入lookback内部。否则这注定会失败(因为需要在字符串开头的左侧添加四个字符)太好了,非常感谢。我说的对吗?这是一个积极的回顾?我从来都不太明白它的意思lol@user2509066是的。在答案的链接上读一读,它很好地解释了这件事。如果这解决了你的问题,请考虑通过点击旁边的复选标记来接受答案。这将显示未来的访问者。(以及)你的问题是如何解决的,请给我一些信任(也给你一点)。
Dim regex As Regex = new Regex("(.{5}).{8}(.*)")
Console.WriteLine(regex.Replace(":1Af404080A83hfndsgt4u47", "$1Hello123$2"))