gpt4 book ai didi

c# - 需要从空格分隔的字符串中的特定位置删除特定引号,同时保留其他引号

转载 作者:可可西里 更新时间:2023-11-01 09:38:31 25 4
gpt4 key购买 nike

我有一个在 C# 中运行的 Windows 命令行程序,它读取服务器上的日志文件。日志文件以空格分隔(我们无法更改)包含类似于以下的记录:

74.57.205.141 - - [30/Mar/2012:00:03:04 +0000] "GET /7/961/148606/v1/00.akacast.akamaistream.net/00-radio-128" 200 1758815 "-" "iTunes/10.5.3 (Windows; Microsoft Windows 7 x64 "R2" Business Edition Service Pack 1 (Build 7601)) AppleWebKit/534.52.7"  102

该行开始读取“/iTunes 是用户代理字符串的开头。它应该一直到 AppleWebKit/534.52.7 并在那里结束。问题是对于某些用户代理字符串,a恶意引用将被插入到用户代理字符串中。在示例中,该恶意引用是"R2"

但它并不总是 R2,一些其他代理字符串也可以添加额外的引号,所以我不能只查找“R2”并将其替换为 R2。

我能够在有效字符串中提出的模式是始终有 6 个引号,每个偶数编号的引号后面都有一个空格。

第一个引用 - 开始字符串第二个引用 - 以空格结尾的字符串第三个报价 - 开始字符串第 4 引号 - 以空格结尾的字符串第 5 引述 - 起始字符串第 6 引号 - 以空格结尾的字符串

无效的字符串将始终遵循此模式。

第一个引用 - 开始字符串第二个引用 - 以空格结尾的字符串第三个报价 - 开始字符串第 4 引号 - 以空格结尾的字符串第 5 引述 - 起始字符串第 6 引号 - 结束字符串后面没有空格第 7 引述 - 起始字符串第 8 条引述 - 以空格结尾的字符串

我需要的是搜索字符串以沿着引号位置查找无效模式并从第 6 和第 7 个位置删除引号的方法。我在想一个好的正则表达式可能会起作用,但我对它们不是很好并且还没有想出任何有用的东西,更不用说正则表达式不会从第 6 和第 7 个位置删除那些引号。

编辑

这可能过于简单,但我能够通过一些索引操作来解决我的特定问题。不幸的是,我无法让正则表达式解决方案为我工作:(

工作代码:

string str = "74.57.205.141 - - [30/Mar/2012:00:03:04 +0000] \"GET /7/961/148606/v1/00.akacast.akamaistream.net/00-radio-128\" 200 1758815 \"-\" \"iTunes/10.5.3 (Windows; Microsoft Windows 7 x64 \"R2\" Business Edition Service Pack 1 (Build 7601)) AppleWebKit/534.52.7\"  102";

int[] indexes = Enumerable.Range(0, str.Length).Where(x => str[x] == '"').ToArray();

if (indexes.Length > 6)
{
//need to remove extra quotes from the 6th position and 7th position.
//remove the 7th position first to prevent the index from changing on the quotes we need to remove.
str = str.Remove(indexes[6], 1).Remove(indexes[5], 1);
}

最佳答案

这个怎么样:

".*?".*?".*?".*?"(.*)"

基本匹配

[ignore beginning]
[First Quote Pair]
[AnythingInBetween]
[Second Quote Pair]
[AnythingInBetween]
[Quote]
GROUPS YOUR FINAL STRING HERE until
[LastQuote in the line]

然后,您可以删除任何内部引号。

这是有效的,因为它对前两个引号对使用非贪婪正则表达式,然后对最终引号匹配使用贪婪正则表达式,因此最终匹配将忽略所有引号,直到达到最终引号。

关于c# - 需要从空格分隔的字符串中的特定位置删除特定引号,同时保留其他引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11564592/

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