我需要在C#中应用正则表达式。 字符串如下所示:C#正则表达式删除行
MSH|^~\&|OAZIS||C2M||20110310222404||ADT^A08|00226682|P|2.3||||||ASCII
EVN|A08
PD1
PV1|1|test
而我想做的事就是删除所有只包含3个字符(不带分隔符“|”)的行。所以在这种情况下,'PD1'行(第3行)必须被删除。 这是可能的正则表达式?
THX
我需要在C#中应用正则表达式。 字符串如下所示:C#正则表达式删除行
MSH|^~\&|OAZIS||C2M||20110310222404||ADT^A08|00226682|P|2.3||||||ASCII
EVN|A08
PD1
PV1|1|test
而我想做的事就是删除所有只包含3个字符(不带分隔符“|”)的行。所以在这种情况下,'PD1'行(第3行)必须被删除。 这是可能的正则表达式?
THX
为什么不只是得到一个处理的文件,做一个临时的输出文件,并通过线运行一个接一个。如果有一个包含3个字符的行,请跳过它。如果文件可以完全保存在内存中,那么可以使用GetLines()(我认为这就是所谓的方法)来获取一行一行代表文件的字符串数组。
File.ReadAllLines http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx – 2011-03-10 22:36:04
以下将做你想要的东西没有正则表达式。
String inputString;
String resultingString = "";
for(var line in inputString.Split(new String[]{"\n"})) {
if (line.Trim().Length > 3 || line.Contains("|"))
resultingString += line + "\n";
}
这假定你有你的文件作为一个大字符串。它会为您提供另一个字符串,并删除必要的行。
(或者你可以直接将文件做:
string[] goodLines =
// read all of the lines of the file
File.ReadLines("fileLocation").
// filter out the ones you want
Where(line => line.Trim().Length > 3 || line.Contains("|")).ToArray();
你有一个String []与所有在你的文件的正确行结束)
此正则表达式将确定符合排除标准^[^|]{3}$
的行,那么它只是遍历所有行(包含数据)并检查哪些符合排除标准。像这样。
foreach(Match match in Regex.Matches(data, @"^.+$")
{
if (!Regex.IsMatch(match.Value, @"^[^|]{3}$"))
{
// Do Something with legitamate match.value like write line to target file.
}
}
这三个角色总是会自己在一条线上吗?如果是这样,你可以使用字符串/字符串标记的结束的开始。
这里的匹配三个大字是由自己在字符串中的正则表达式:
\A.{3}\z
\ A是字符串的开始。 \ z是字符串的结尾。 。是任意字符,{3}有3次出现
此: (?<![|])[^\n]{4}\n
正则表达式匹配你在我使用的在线正则表达式测试仪想要的东西,但是我相信{4}
实际上应该是一个{3}
,所以尽量如果切换它们不适合你。
编辑:
这也适用于:\n[^|\n]{3}\n
并可能是更接近你在找什么。
编辑2:
数为括号肯定是{3}
,测试它在家里。
从我到目前为止看到张贴的解决方案,只是一般的观察结束。原始问题包括评论“删除只有包含3个字符的所有行”[我的重点]。我不知道,如果你的意思字面意思是“只有3个字符”,但如果你没有,你可能想改变的东西提出的解决方案的逻辑就像
if (line.Trim().Length > 3 ...)
到
if (line.Trim().Length != 3 ...)
例如,以防万一带2个字符的行确实有效。 (提出的正则表达式解决方案的想法相同。)
这个问题有点含糊。
如前所述,得到的答案是这样的
(?:^|(?<=\n))[^\n|]{3}(?:\n|$)
这使得空格将比分扳平。
所以"#\t)"
也将被删除。
要限制字符可视(非空格),你可以使用
(?:^|(?<=\n))[^\s|]{3}(?:\n|$)
这doesent允许空白。
对于上下文都是单个字符串,替换为''和全局。在Perl
实例背景:s/(?:^|(?<=\n))[^\n|]{3}(?:\n|$)//g
试试这个:
text = System.Text.RegularExpressions.Regex.Replace(
text,
@"^[^|]{3}(?:\r\n|[\r\n]|$)",
"",
System.Text.RegularExpressions.RegexOptions.Multiline);
你可以做到这一点使用正则表达式
string output = Regex.Replace(input, "^[a-zA-Z0-9]{3}$", "");
[A-ZA-Z0-9]将匹配任何字符或数字 {3}将匹配3的确切数字
您可能应该使用像这样的[NHapi](http://nhapi.sourceforge.net/home.php)的HL7解析器o f工作。 – 2011-03-10 22:16:04