C# 需要在特定字符组合后修剪字符串直到结束

C# 需要在特定字符组合后修剪字符串直到结束,c#,string,trim,C#,String,Trim,我需要帮助修剪字符串中的所有内容,直到它遇到第一个“\0”后结束 因此: “测试\1\2\3\0\0\0\0\0\0\0\0\u asdfgh\u qwerty\u blah\u blah” 变成 “测试\1\2\3” 我用的是c#。非常感谢您的帮助 谢谢。那么: string s = "test\1\2\3\0\0\0\0\0\0\0\0\0_asdfgh_qwerty_blah_blah_blah"; int offset = s.IndexOf("\\0"); if (offset &g

我需要帮助修剪字符串中的所有内容,直到它遇到第一个“\0”后结束

因此:

“测试\1\2\3\0\0\0\0\0\0\0\0\u asdfgh\u qwerty\u blah\u blah”

变成

“测试\1\2\3”

我用的是c#。非常感谢您的帮助

谢谢。

那么:

string s = "test\1\2\3\0\0\0\0\0\0\0\0\0_asdfgh_qwerty_blah_blah_blah";

int offset = s.IndexOf("\\0");
if (offset >= 0)
    s = s.Substring(0, offset);

找到“\0”第一次出现的位置,并从开始到第一次出现的位置生成另一个作为原始子字符串的字符串。

以下正则表达式返回的匹配值也应该是您所要的(以及子字符串方法的替代方法),基本上,它从字符串开始,只要后面的两个字符不是
\0
,它就会展开匹配:

if (origString.IndexOf(@"\0") != -1) {
   newString = origString.Substring(0, origString.IndexOf(@"\0");
} else {
    newString = origString;
}
^(?:(?!=\0).)+

somestring=Regex.split(somestring,\\0”)[0]

尝试正则表达式替换:
s/^([^\0]+)\0.*/$1/
应该可以。不幸的是,我对我的C不太了解,无法在不查找的情况下将其键入。这是转义的
(char)0
还是文本字符串
“\0”
?马特:我会尝试用你的正则表达式替换。谢谢。瑞恩:这应该是一个逃生游戏。但它是一个文本字符串。为什么会这样?因为我是从win32 API(我在c#中作为外部程序调用)获取这个字符串的。不知怎的,在c#中调用c函数的整个机制都不太好用,所以它返回的字符串以“\0”序列而不是空字符“\0”结尾。各位:谢谢你们的解决方案,我会尝试一下,看看什么最适合我,让你们都知道我用了什么。我最好为深思熟虑的解释投赞成票,而不是把答案扔到黑板上。哈哈……如果你没有“如果”,会发生什么?你会得到你正在搜索的同一个字符串吗???@VoodooChild:
IndexOf
将返回-1,如果原始字符串不包含子字符串,这将中断
子字符串
。@Anthony:你也可以使用
(@“\0”)
来增加代码readable@abatishchev,我知道,但其他人可能不知道。谢谢。我知道我是唯一一个考虑到字符串中没有
\0
的情况的人:)如果输入字符串不包含这样的子字符串怎么办?它将抛出一个Exceptions=s.Substring(0,Math.Max(0,s.IndexOf(“\\0”);这也是不正确的,因为
Substring
的第二个参数是长度。您可能希望
Math.Max(s.length,s.IndexOf(“\\0”)
@abatishchev:比他要求的要多,但一定要多。
if (origString.IndexOf(@"\0") != -1) {
   newString = origString.Substring(0, origString.IndexOf(@"\0");
} else {
    newString = origString;
}
^(?:(?!=\0).)+