Regular Expression 正则表达式-1 (C#)

express|正则

起因是因为一片帖子,问到了一个问题,帖子是这样的:

Originally Posted by 人就是这样
我想编一个程序,但学CompSci是很久以前的事情了。想请教请教大家。

有两个txt文件,一个叫source.txt(有很多数据), 一个叫target.txt(空白的)

我想把source.txt里的一些数据提取出来(稍微修改一下),然后写到target.txt里面。

举个例子:
sourse.txt里的数据:
2oi)4@##( "data:001%abc">dsi-23)(*32##("data:dce%xy3"#(*EOIj2308Eld

想提取的数据就是橘黄色的。
data:001%abc

全部提取出来以后,我还想把%换成*, 然后每条数据后面加个逗号","

最后target.txt就应该这样:

data:001*abc,
data:dce*xyz

请问应该怎么做啊?实在JAVA忘光了。求教~~

如果帮我做的话付点酬劳也可以。
以前我也面临过类似的问题,总是通过程序描述的办法解决,现在问题又提起来了,于是静下心来想一想。有了上学期330编译原理的基础,并且做过有限状态自动机以后,已经非常明确这种文字处理的事情应该交给Regular Expression(正则表达式),只不过自己总因为正则表达式晦涩难懂,因此没有好好的琢磨过。
于是我就打算借这个机会把Regular Expression好好的熟悉一下。结果发现程序原来如此好写:
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;

namespace RegExpression
{
/// <summary>
///
/// </summary>
public class DataFilter
{
public static void Main(string[] args)
{
if( args.Length < 2 )
{
Console.Error.WriteLine("Please enter 2 filenames(e.g. In.txt Out.txt)");
return;
}
string Result;
using( StreamReader sr = new StreamReader(args[0]) )
{
Result = Filter( sr.ReadToEnd() );
}
using( StreamWriter wr = new StreamWriter(args[1]) )
{
wr.Write(Result);
}
}
private static string Filter(string input)
{
StringBuilder result = new StringBuilder();
Regex r = new Regex("\"(?<data>\\w+):(?<key>\\w+)%(?<value>\\w+)\"", RegexOptions.Compiled);
for( Match m = r.Match(input); m.Success; m = m.NextMatch() )
{
result.Append( m.Result("${data}:${key}*${value},"+Environment.NewLine) );
}
return result.ToString();
}
}
}

实现这个功能的关键代码也就不超过10行就够了,一个字,爽。
略加修正:
·using statement
·end of line (Environment.NewLine)
·use StringBuilder to improve performence
这些要感谢cumcum给与指正。

时间: 2024-11-05 16:41:10

Regular Expression 正则表达式-1 (C#)的相关文章

第 46 章 Regular expression (正则表达式)

46.1. Network 网络地址处理 $ wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' 202.130.101.34 $ curl -q -s http://checkip.dyndns.org | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' 202.130.101.34 $ curl -q -s http://checkip.dynd

php 正则表达式(Regular Expression)用法

正则表达式(Regular Expression)   正则表达式系统: 1.POSIX 2.Perl   PHP中使用的regex是PCRE: NOTE:PCRE(Perl兼容正则表达式,Perl Compatible Regular Expressions)   PCRE语法: 1.定界符 必须成对出现,可以使用除0-9a-zA-Z以外的任何字符 2.原子 1.正则需要匹配的可见和不可见字符都是原子 2.一个正则表达式最少含有一个原子 3.当需要匹配诸如"("."[&qu

java正则表达式; regular expression

express|正则 概要 文本处理经常涉及的根据一个pattern的匹配.尽管java的character和assorted 的String类提供了low-level的pattern-matching支持,这种支持一般带来了复杂的代码.为了帮助你书写简单的pattern-matching代码,java提供了regular expression.在介绍给你术语和java.util.regex包之后,Jeff Friesen explores 了许多那个包的Pattern类支持的正则表达式结构.然

正则表达式regular expression详述(一)

express|正则 正则表达式是regular expression,看来英文比中文要好理解多了,就是检查表达式符 不符合规定!!正则表达式有一个功能十分强大而又十分复杂的对象RegExp,在JavaScript1.2 版本以 上提供. 下面我们看看有关正则表达式的介绍: 正则表达式对象用来规范一个规范的表达式(也就是表达式符不符合特定的要求,比如是不是Email 地址格式等),它具有用来检查给出的字符串是否符合规则的属性和方法. 除此之外,你用RegExp构造器建立的个别正则表达式对象的属性

leetcode 10 Regular Expression Matching(简单正则表达式匹配)

最近代码写的少了,而leetcode一直想做一个python,c/c++解题报告的专题,c/c++一直是我非常喜欢的,c语言编程练习的重要性体现在linux内核编程以及一些大公司算法上机的要求,python主要为了后序转型数据分析和机器学习,所以今天来做一个难度为hard 的简单正则表达式匹配. 做了很多leetcode题目,我们来总结一下套路: 首先一般是检查输入参数是否正确,然后是处理算法的特殊情况,之后就是实现逻辑,最后就是返回值. 当编程成为一种解决问题的习惯,我们就成为了一名纯粹的程序

LeetCode 10 Regular Expression Matching (正则表达式匹配)

翻译 实现支持"."和"*"的正则表达式匹配. "." 匹配支持单个字符 "*" 匹配零个或多个前面的元素 匹配应该覆盖到整个输入的字符串(而不是局部的). 该函数的原型应该是: bool isMatch(const char * s, const char * p) 示例: isMatch("aa","a") → false isMatch("aa","a

共享日常收集JS正则表达式(JavaScript regular expression)_正则表达式

RegExp直接量和对象的创建 就像字符串和数字一样,程序中每个取值相同的原始类型直接量均表示相同的值,这是显而易见的.程序运行时每次遇到对象直接量(初始化表达式)诸如{}和[]的时候都会创建新对象.比如,如果在循环体中写var a = [],则每次遍历都会创建一个新的空数组.正则表达式直接量则与此不同,ECMAScript 3规范规定,一个正则表达式直接量会在执行到它时转换为一个RegExp对象,同一段代码所表示正则表达式直接量的每次运算都返回同一个对象.ECMAScript 5规范则做了相反

正则表达式基础教程 regular expression第1/2页_正则表达式

前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感.只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题. 1. 引子  目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子. 正则表达式的使用,可以通过简单的办法来实现强大的功能.为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习

正则表达式regular expression详述(一)_正则表达式

 正则表达式是regular expression,看来英文比中文要好理解多了,就是检查表达式符不符合规定!!正则表达式有一个功能十分强大而又十分复杂的对象RegExp,在JavaScript1.2 版本以上提供.    下面我们看看有关正则表达式的介绍:    正则表达式对象用来规范一个规范的表达式(也就是表达式符不符合特定的要求,比如是不是Email地址格式等),它具有用来检查给出的字符串是否符合规则的属性和方法.    除此之外,你用RegExp构造器建立的个别正则表达式对象的属性,就已经