[英]Regex to match a word beginning with a period and ending with an underscore?
我是Regex的新手,但是我有一系列類似於"[$myVar.myVar_STATE]"
的字符串,我需要替換第二個myVar
,第二個myVar
以句點開頭並以下划線結尾。 我需要它完全匹配它,因為有時我會"[$myVar.myVar_moreMyVar_STATE]"
,在這種情況下,我不想替換任何東西。
我已經嘗試過諸如"\\b.myVar_\\b", "\\.\\bmyVar_\\b"
東西,但都沒有運氣。
應該這樣做:
\[\$myVar\.(.*?)_STATE\]
您可以使用此小技巧來挑選組,並在最后構建替換組,如下所示:
var replacement = "something";
var input = @"[$myVar.myVar_STATE]";
var pattern = @"(\[\$myVar\.)(.*?)_(.*?)]";
var replaced = Regex.Replace(input, pattern, "$1"+ replacement + "_$2]")
怎么樣呢?
。*。(myVar _)。*
這會尋找任何東西然后。 和“ myVar_”后跟任何內容。
它匹配:
“ [$ myVar.myVar_STATE]”
這里只有第一個myVar_:
“ [$ myVar.myVar_moremyVar_STATE]”
看到它在行動 。
這個怎么樣:
\[\$myVar\.([^_]+)_STATE\]
火柴:
[$myVar.myVar_STATE] // matches and captures 'myvar'
[$myVar.myVar_moreMyVar_STATE] // no match
工作正則表達式示例:
或者,如果_STATE
是變量,則可以使用此命令:(只要STATE部分中的文本中沒有下划線即可。)
\[\$myVar\.([^_]+)_[^_]+\]
工作正則表達式示例:
編輯:符合OP下面的評論,這應該是他要去的:
(\[\$myVar\.)([^_]+)(_[^_]+\])
正則表達式替換示例:
C#
var pattern = @"(\[\$myVar\.)([^_]+)(_[^_]+\])";
var replaced = Regex.Replace(input, pattern, "$1"+ newVar + "$3")
C#已經具有內置方法來執行此操作
string text = ".asda_";
Response.Write((text.StartsWith(".") && text.EndsWith("_")));
真的需要Regex嗎?
string input = "[$myVar.myVar_STATE]";
string oldVar = "myVar";
string newVar = "myNewVar";
string result = input.Replace("." + oldVar + "_STATE]", "." + newVar + "_STATE]");
如果"STATE"
是可變部分,那么我們將需要使用Regex。 最簡單的方法是使用與前綴和后綴之間的位置匹配的此Regex模式。 前綴和后綴用於搜索,但不包含在結果匹配項中:
(?<=prefix)find(?=suffix)
result =
Regex.Replace(input, @"(?<=\.)" + Regex.Escape(oldVar) + "(?=_[A-Z]+])", newVar);
說明:
prefix
部分是\\.
,代表"."
。
find
部分是要替換的轉義的舊變量。 正則表達式轉義可確保對正則表達式中具有特殊含義的字符進行轉義。
suffix
部分是_[AZ]+]
,下划線后跟至少一個字母,后跟"]"
。 注意:第二個]
不需要轉義。 左括號[
必須像這樣逃脫: \\[
。 我們不能將\\w
用作STATE部分的單詞字符,因為\\w
包含下划線。 您可能需要調整[AZ]
部分以使其完全匹配所有可能的狀態(例如,如果狀態包含數字,請使用[A-Z0-9]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.