我搜索了一个答案,我在Stack Exchange上发现了一些问题,但他们没有帮助我。例如,我发现C# regex - not matching my string但是给出的答案太复杂了,我无法理解。我不知道或不了解正则表达式。我想做的就是从字符串中删除双引号。
简单地说我的问题,我有一个字符串“\”123.456 \“”我需要删除“\”“
所以我把表达“[^ \ w \\”]“并在调用
之后string myString Regex.Replace("\"123.456\"", "[^\\w\\\"]", "",
RegexOptions.None, TimeSpan.FromSeconds(1.5));
myString是“\”123.456 \“”。我只需要知道我的表达应该是什么。我将无法理解有关学习正则表达式的任何冗长的讨论或讲座。
我在http://msdn.microsoft.com/en-us/library/844skk0h(v=vs.110).aspx直接从微软那里得到了我的例子,所以基本上我所做的只是将“。@ - ”改为“\”“。
UPDATE 显然试图问一个简单的问题只会吸引巨魔。我不想太复杂,因为我不想让你辛苦工作的人忙于花太多时间回答错误的问题。我想要变得更好。
我们需要解析来自多个客户端的输入文件并向前移动,客户端数量会增加,每个客户端的文件数量也会增加。
我们发现,在我们客户的几个传输文件中,许多字段会有各种额外的字符。我们不知道这些角色是如何或为何在那里,而我们的客户并没有说出来。 (如果你想知道他们为什么不说,请继续,这些不是你要找的问题)
因此,我们有许多来自许多客户的文件,每个客户都有许多行,包含许多数据字段,我们需要删除“坏”字符。
我采用了微软方法,并将其改变了一点以使其更具动态性。
private string CleanInput(string strIn, string chars)
{
// Replace invalid characters with empty strings.
try
{
string regexString = string.Format(@"[^\w\{0}]", chars);
return Regex.Replace(strIn, regexString, "",
RegexOptions.None, TimeSpan.FromSeconds(1.5));
}
// If we timeout when replacing invalid characters,
// we should return Empty.
catch (RegexMatchTimeoutException)
{
return string.Empty;
}
这里的目标是能够删除任何不属于动态的字符但是我们不能只对这些字符进行硬编码,因为并非所有字段都具有任何这些字符,更重要的是,某些字段会有一些字符不良字符以及其他不被认为对该字段不利的字符,但可能被认为对其他字段不利。
到目前为止我?
所以,在试图让我的工作在星期五(是的,明天)完成之后,我决定从3个输入文件中只有几个已知的坏字符慢慢开始。到目前为止,这些字符是单引号,破折号,双引号,美元符号,逗号。但是我的3个文件中的所有字段都不需要剥离这些字符,所以我打算只在需要它的那些字段上调用CleanInput方法,并且仅针对我们需要剥离的字符。
好的,所以在我测试时,我发现在一个字段上,我们要删除逗号,单引号,双引号和美元符号,它不是删除双引号(显然也是反斜杠)。所以我通过首先只传入逗号来调试这个问题。然后我尝试只传入单引号 - 这是有效的。然后我传递了美元符号 - 这很有效。然后我传入了转义的双引号 - 但是没有用 - 双引号仍然在字符串中。所以我在一个新的控制台项目中简化了我的测试并且我对字符串进行了硬编码,并且我调用了我的方法只是为了确保没有其他任何东西可以干扰它。
我希望并祈祷没有人花费数小时的宝贵时间来重新配置我的输入文件或试图教我最终都是正则表达式编程。我必须明天完成这件事。请,我只想知道如何从给定的字符串中删除双引号(显然也是反斜杠)。
答案 0 :(得分:2)
可能只使用替换?
,而不是让正则表达式参与其中var myString = "\\\"123.456\\\"";
var myCleanString = myString.Replace(@"\""", "");
答案 1 :(得分:1)
您正在匹配否定组([^]
位)。这匹配方括号中的任何字符 not 并替换它。您想要替换组中 的任何内容,只需将要替换的字符放在方括号内并删除否定(^
):
private static string CleanInput(string strIn, string chars)
{
// Replace invalid characters with empty strings.
try
{
string regexString = string.Format(@"[{0}]", chars);
return Regex.Replace(strIn, regexString, "",
RegexOptions.None, TimeSpan.FromSeconds(1.5));
}
// If we timeout when replacing invalid characters,
// we should return Empty.
catch (RegexMatchTimeoutException)
{
return string.Empty;
}
}
如果您知道要包含的内容而不是排除,则可以使用否定版本。例如,如果你知道你只想要数字和你可以做的句号:
string myString = Regex.Replace("\"123.456\"", "[^\\d.]", "",
RegexOptions.None, TimeSpan.FromSeconds(1.5));