Regular Expression 正則表達式-1 (C#)

 

起因是因爲一片帖子,問到了一個問題,帖子是這樣的:

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();
        }
    }

 
發佈了36 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章