gpt4 book ai didi

regex - 如何在正则表达式匹配项中替换字符串

转载 作者:行者123 更新时间:2023-12-03 18:31:53 25 4
gpt4 key购买 nike

我正在解析一个包含IP地址和端口的文本文件。 IP地址和端口组合用一个或多个TAB或SPACE或两者分开。

文本文件中出现的示例如下:


121.78.195.165 8888


我需要匹配整个文本,并用TAB或SPACE返回的每个匹配项都用“:”替换,以便返回以下内容:


121.78.195.165:8888


如果返回的比赛中嵌入了SPACE或TAB,这将很容易,但是有时返回的比赛中却没有SPACE或TAB。有时只有一个空间。

例如。有时像这样:


121.78.195.1658888


和其他类似的东西:


121.78.195.165 8888


上面的变化取决于是否有SPACE,TAB或两者的组合以及源文本中有多少。

我在Delphi中使用TPerlRegex像这样:

  regex := TPerlRegEx.Create;
try
regex.Options := [preMultiLine];
regex.regex :=
'\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[\s\t]+\d{2,5}\b';
regex.Study;

regex.Subject := StringOf(buf);

if regex.Match then
begin

regex.Replacement := ':';


s := regex.MatchedText; // <---- Need this to be '121.78.195.165:8888'

ShowMessage(s);
end;

finally
regex.Free;
end;


因此,我的问题更多是关于如何使用Regex引擎替换IP地址之后和端口之前的TAB或SPACE。

TIA。

最佳答案

您可以使用类似以下内容(针对XE2 TPerlRegEx兼容性进行编辑):

var
Regex: TPerlRegEx;
ResultString: string;
begin
Regex := TPerlRegEx.Create;
try
Regex.RegEx := '\b((?:[0-9]{1,3}\.){3}[0-9]{1,3})\s(.*)';
Regex.Options := [];
Regex.State := [preNotEmpty];
Regex.Subject := SubjectString;
Regex.Replacement := '\1:\2';
Regex.ReplaceAll;
ResultString := Regex.Subject;
finally
Regex.Free;
end;
end;


已测试以下值:

85.39.138.58 151
187.39.55.23 399
80.14.5.209 1424
80.14.6.217 1424
1.1.135.73 1464
80.14.5.209 135
80.14.7.2 1392
187.39.55.100 399
67.78.18.222 1472


结果:

85.39.138.58:151
187.39.55.23:399
80.14.5.209:1424
80.14.6.217:1424
1.1.135.73:1464
80.14.5.209:135
80.14.7.2:1392
187.39.55.100:399
67.78.18.222:1472

关于regex - 如何在正则表达式匹配项中替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com