簡體   English   中英

正則表達式在方括號外查找字符串

[英]Regular expression find string outside square brackets

我有以下示例數據。 最終目標是即時翻譯方括號外的數據(如西班牙語等其他語言)。

下面的代碼適用於大多數情況,但是當括號 [] 在字符串內時,由於明顯的原因,它對於最后一個數據失敗。

所以我想知道如何編寫一個只會抓住括號外的東西的表達式。 與我現在正在做的完全相反。 請記住,可能存在根本沒有任何方括號的消息。 您可以假設左括號總是有右括號。

namespace RegExDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] data = new string[]
            {
                "[00:05:00] Insert buckle tongue [0/1 = 5.81mA]", 
                "Remove buckle tongue [1/1 = 5.81mA]", 
                "Move track forward",
                "Move track forward [MinCrt: 1.0, 0.1A, MaxCrt: 5.0] [MinPos: 450mm, 420, 520mm]",
                "Waiting before taking reading [500ms]",
                "Waiting [500ms] before taking reading"
            };

            var regEx = new Regex(@"\[(.*?)\]");
            foreach (var instruction in data)
            {
                var instructionsOnly = regEx.Replace(instruction, string.Empty).Trim();
                var newInstruction = "'This is now Spanish: " + instructionsOnly + "'";
                var newFinalValue = instruction.Replace(instructionsOnly, newInstruction);
                Console.WriteLine(newFinalValue);
            }

            Console.WriteLine("All done");
            Console.ReadLine();
        }
    }
}

樣本輸出

不完全符合您的要求,但我建議您這樣做:

namespace RegExDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] data = new string[]
            {
                            "[00:05:00] Insert buckle tongue [0/1 = 5.81mA]",
                            "Remove buckle tongue [1/1 = 5.81mA]",
                            "Move track forward",
                            "Move track forward [MinCrt: 1.0, 0.1A, MaxCrt: 5.0] [MinPos: 450mm, 420, 520mm]",
                            "Waiting before taking reading [500ms]",
                            "Waiting [500ms] before taking reading"
            };

            var regEx = new Regex(@"\[.*?\]"); // lose the parentheses
            var placeholder = "SOMETHINGTHETRANSLATIONSERVICECANBETRUSTEDNOTTOTRYTOTRANSLATE";

            foreach (var instruction in data)
            {
               var match = regEx.Match(instruction);
               var instructionsOnly = regEx.Replace(instruction, placeholder).Trim();
               var newInstruction = "'This is now Spanish: " + instructionsOnly + "'";
               var newFinalValue = newInstruction.Replace(placeholder, match.Value);
               Console.WriteLine(newFinalValue);
            }

            Console.WriteLine("All done");
            Console.ReadLine();
        }
    }
}

糟糕,這是錯誤的; 起初沒有看到可以有多個括號表達式。 給我一點時間。

我在機器翻譯服務方面有一些經驗,通常他們不理會全大寫單詞混搭。 但是您可以嘗試一系列符號或任何似乎適用於您的特定服務的符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM