我是正则表达式的新手,但我有一系列类似于此"[$myVar.myVar_STATE]"
的字符串我需要替换以句点开头并以下划线结尾的第二个myVar
。我需要它来完全匹配它,因为有时我会"[$myVar.myVar_moreMyVar_STATE]"
,在这种情况下我不想替换任何东西。
我尝试了"\b.myVar_\b", "\.\bmyVar_\b"
之类的东西以及其他几件事,一切都没有运气。
答案 0 :(得分:1)
这应该这样做:
\[\$myVar\.(.*?)_STATE\]
您可以使用这个小技巧来挑选组,并在最后构建替换,如下所示:
var replacement = "something";
var input = @"[$myVar.myVar_STATE]";
var pattern = @"(\[\$myVar\.)(.*?)_(.*?)]";
var replaced = Regex.Replace(input, pattern, "$1"+ replacement + "_$2]")
答案 1 :(得分:1)
如下:
。*。(myVar的_)。*
这样可以查找任何内容。和“myVar_”后跟任何东西。
匹配:
“[$ myVar.myVar_STATE]”
这里只有第一个myVar_:
“[$ myVar.myVar_moremyVar_STATE]”
答案 2 :(得分:1)
这个怎么样:
\[\$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")
答案 3 :(得分:1)
C#已经有内置方法来执行此操作
string text = ".asda_";
Response.Write((text.StartsWith(".") && text.EndsWith("_")));
答案 4 :(得分:1)
Regex真的需要吗?
string input = "[$myVar.myVar_STATE]";
string oldVar = "myVar";
string newVar = "myNewVar";
string result = input.Replace("." + oldVar + "_STATE]", "." + newVar + "_STATE]");
如果"STATE"
是可变部分,那么我们需要使用Regex。最简单的方法是使用此正则表达式模式匹配前缀和后缀之间的位置。前缀和后缀用于搜索,但不包括在结果匹配中:
(?<=prefix)find(?=suffix)
result =
Regex.Replace(input, @"(?<=\.)" + Regex.Escape(oldVar) + "(?=_[A-Z]+])", newVar);
说明:
prefix
部分为\.
,代表"."
。
find
部分是要替换的转义旧变量。正则表达式转义可确保转义在Regex中具有特殊含义的字符。
suffix
部分为_[A-Z]+]
,下划线后跟至少一个字母,后跟"]"
。注意:第二个]
不需要转义。开头括号[
必须像这样进行转义:\[
。我们不能将\w
用于STATE部分的单词字符,因为\w
包含下划线。您可能需要调整[A-Z]
部分以完全匹配所有可能的状态(例如,如果州有数字,请使用[A-Z0-9]
。