[英]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.