gpt4 book ai didi

c# - 如何替换部分未知字符串

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:13 24 4
gpt4 key购买 nike


我需要替换(或最好删除)一个我知道开头和结尾的字符串。
有些字符是未知的,也是字符串的长度。
当然,我可以使用子字符串和其他 C# 字符串操作,但是没有简单的替换通配符选项吗?

mystring.Replace("O(*)", "");

会是一个不错的选择。
我知道字符串以 O() 开头并以 ) 结尾。
这可能比字符串看起来像 O(something);QG(anything else)
这里的结果应该是 ;QG(anything else)

这可以通过简单的替换实现吗?
关于高级选项,他的字符串不止一次存在,如下所示:
O(某事);O(某人);QG(其他)

最佳答案

看看正则表达式。

下面会遇到这种情况:

var result = Regex.Replace(originalString, @"O\(.*?\)", "");

含义:

  • @ - 关闭 C# 将\解释为转义,否则编译器将看到我们的 \( 并尝试用另一个字符替换它,就像它对\n 所做的那样成为换行符(并且没有 \( 所以这是一个编译器错误)。Regex 还使用\作为转义字符,因此没有 @ 将斜杠插入字符串中,以便 regex 解释为斜杠执行正则表达式转义,它需要双 C# 斜杠,这会使正则表达式模式更加困惑
  • " c# 字符串的开始
  • O\( 文字字符 O 后跟文字字符 ( - 括号在正则表达式中有特殊含义,因此反斜杠禁用特殊含义)
  • .*? 匹配零个或多个任意字符(惰性/悲观)
  • \) 文字 )
  • " 字符串结束

.*? 是一件复杂的事情,需要更多解释:

在正则表达式中 . 表示“匹配任何单个字符”,而 * 表示“前一个字符的零个或多个”。这样 .* 表示“零个或多个任意字符”。

? 有什么用?

默认情况下,正则表达式 * 是“贪婪的”——一个 .* 吃掉整个输入字符串,然后开始向后工作,吐出字符,并检查一个匹配。如果你像你说的那样连续有 2 个:

K(hello);O(mystring);O(otherstring);L(byebye)

然后你贪婪地匹配它,然后 O\(.*\) 将匹配初始的 O(,然后消耗所有输入,然后吐出一个尾随 ) 返回并声明它找到了匹配项, 所以 .* 匹配 mystring);O(otherstring;L(byebye

我们不想要这个。相反,我们希望它一次向前处理一个字符,寻找匹配的 )。将 ? 放在 * 之后,从贪婪模式变为悲观(/惰性)模式,并且输入向前扫描而不是压缩到最后并向后扫描。这意味着 O\(.*?) 匹配 mystring,然后匹配 otherstring,留下 K(hello) 的结果; ;;L(byebye),而不是 K(hello);

关于c# - 如何替换部分未知字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58640800/

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