[英]RegEx for VB.net
我有一個包含內容的txt文件
$NETS
P3V3_AUX_LGATE; PQ6.8 PU37.2
U335_PIN1; R3328.1 U335.1
$END
需要以這種格式進行更新,並保存回另一個txt文件
$NETS
'P3V3_AUX_LGATE'; PQ6.8 PU37.2
'U335_PIN1'; R3328.1 U335.1
$END
注意: 行數可能會達到10,000行
我當前的解決方案是逐行讀取txt文件,檢測是否存在“;” 和換行符並進行更改。
現在我有一個保存所有行的變量,還有其他方法,例如通過RegEx進行替換,無需循環遍歷每行即可進行更改,這樣我就可以輕松打印結果
並跟進問題,哪個更有效?
您可能可以使用\\w+;
類的來找到所有匹配項\\w+;
但我不知道您將如何使用Regex.Replace替換掉添加'
但保持原始匹配。
但是,如果您已經將其作為一個變量,則無需再次讀取文件,也可以使代碼全部找到;
否則,無需執行任何操作;
s,然后為每個找到前一個換行符,或者可以在換行符上使用String.Split將已經存在的變量拆分為幾行。 如果想將其返回到一個變量,則可以使用String.Join 。
就我個人而言,我通常會使用String.Split
(如果需要的話,也可以使用String.Join
)方法,因為我認為這會使代碼易於閱讀。
嘗試
ResultString = Regex.Replace(SubjectString, "^([^;\r\n]+);", "'$1';", RegexOptions.Multiline)
在您的多行字符串上。
這將在一行的開頭找到任何字符串(長度為一個或多個),直到第一個分號為止(如果有),並將其替換為引用的等效字符串。
它比您現在一步一步地遍歷字符串要有效,但是如果您有疑問,則必須對其進行概要分析。
我會說是的! 這可以使用正則表達式來完成。 確保您已啟用“多行”選項,並使用一些捕獲組來制作正則表達式以簡化工作。
但是我可以說這不是最佳選擇。 由於您提到了可能要處理的行數,因此使用流方法而不是內存中方法似乎在“資源上明智”的做法更明智。
采用Regex方法(這花了15分鍾,所以請不要以為這是最佳解決方案,只需證明它可以工作)
private static Regex matcher = new Regex(@"^\$NETS\r\n(?<entrytitle>.[^;]*);\s*(?<entryrest>.*)\r\n(?<entrytitle2>.[^;]*);\s*(?<entryrest2>.*)\r\n\$END\r\n", RegexOptions.Compiled | RegexOptions.Multiline);
static void Main(string[] args)
{
string newString = matcher.Replace(ExampleFileContent, new MatchEvaluator(evaluator));
}
static string evaluator(Match m)
{
return String.Format("$NETS\r\n'{0}'; {1}\r\n'{2}'; {3}\r\n$END\r\n",
m.Groups["entrytitle"].Value,
m.Groups["entryrest"].Value,
m.Groups["entrytitle2"].Value,
m.Groups["entryrest2"].Value);
}
希望這可以幫助,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.