2016-03-09 70 views
5

我正在製作一個非常簡單的Windows應用程序,使用Visual Studio和C#編輯電影的字幕文件。我想要一個程序,當沒有人的時候,它會爲對話句子增加一個空格。例如:C# - 如何用「 - é」替換重音字符,即「-É」

- 嘿,怎麼了?

- 沒有太多。

to

- 嘿,怎麼了?

- 沒什麼。

我使用工具箱來創建一個界面,只需一個按鈕來選擇正確的文件。這是我對這個按鈕的代碼:

private void button1_Click(object sender, EventArgs e) 
    { 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      string text = File.ReadAllText(openFileDialog1.FileName, Encoding.GetEncoding("iso-8859-1")); 
      text = text.Replace("-A", "- A"); 
      File.WriteAllText(openFileDialog1.FileName, text, Encoding.GetEncoding("iso-8859-1")); 
     } 
    } 

這樣做是基本取代「-A」與「 - A」,從而創造了空間。這是我提出的解決方案,我打算對每個字母做這個,包括重音字母,例如À,Á,È,É等等。

這不起作用。如果我把text = text.Replace(「 - É」,「 - É」);該程序什麼都不做。

我想知道的是如何解決這個問題。

感謝您的閱讀,如果您有更好的替代方案,請隨時告訴我。

+0

你需要研究'regex'。您不必爲每個可能的字母手動執行此操作! – Blorgbeard

+0

使用'regex.Replace()' – Harsh

+0

作爲@Blorgbeard提到的,你可能能夠做簡單的東西爲'文本=新的正則表達式( 「^ - 」)。REPLACE(文字, 「 - 」)' – Rob

回答

5

至於評論,請使用正則表達式。

 var rx = new System.Text.RegularExpressions.Regex("^-([^ ])"); 
     ... in your loop 
     var text = rx.Replace(text, "- $1"); 

基本上,它所做的就是在字符串的開頭搜索一個破折號,但只有其後面沒有空格。 ()意味着破折號後面的字符應該被「保存」。 在提供的字符串中替換搜索,並用短劃線,空格和之前匹配的相同字符替換(doh!)匹配的文本。不管是什麼。

來源:https://xkcd.com/208/

編輯:你沒有一個循環,你必須包含在其中的每一行應該包含一個副標題行一個文件的完整內容的字符串(右?)。 如果是這樣的話,你可以配置正則表達式處理字符串作爲行的列表,因爲這樣:

 var rx = new Regex("^-([^ ])", RegexOptions.Multiline); 

看到這個搗鼓一個例子: https://dotnetfiddle.net/ciFlAu

+0

非常感謝。我有幾個問題: 1 - 的'System.Text.RegularExpressions.Regex'顯示爲灰色,如果我將鼠標懸停它,它說:「名稱可以簡化」。這很重要嗎? 2 - 我不明白你的意思是......在你的循環中。我非常清楚,我只是在昨天才開始C#。 您的代碼沒有對我的申請工作,並沒有改變字幕文件都沒有。你有什麼想法,爲什麼? –

+0

1 - 如果您已在文件中使用System.Text.RegularExpressions,則不需要完全限定名稱。所以你可以簡化它而不用擔心。 2 - 我現在意識到你的代碼中沒有循環。你必須爲正則表達式提供一些選項。讓我檢查一下它們。 –

+0

您的編輯工作完美。非常感謝!在這裏,我要寫幾十行,每一個可能的字母,並且你只用一行就可以解決它。那就是效率!再次謝謝你。 –

1

對於重音字符,考慮使用其Unicode表示:

string text = "-\u00C9"; //-É 
text = text.Replace("-\u00C9", "- \u00C9")); 

而且你還可以使用無間斷空間,空間更換,以防萬一:

string text = "-\u00C9"; 
text = text.Replace("-\u00C9", "-\u00A0\u00C9")); 

然後你就可以編碼使用UTF-8/UTF-16:

File.WriteAllText(openFileDialog1.FileName, text, Encoding.GetEncoding("UTF-8"));