正则表达式匹配以句点开头并以下划线结尾的单词?

时间:2014-03-05 16:51:31

标签: c# regex

我是正则表达式的新手,但我有一系列类似于此"[$myVar.myVar_STATE]"的字符串我需要替换以句点开头并以下划线结尾的第二个myVar。我需要它来完全匹配它,因为有时我会"[$myVar.myVar_moreMyVar_STATE]",在这种情况下我不想替换任何东西。

我尝试了"\b.myVar_\b", "\.\bmyVar_\b"之类的东西以及其他几件事,一切都没有运气。

5 个答案:

答案 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]”

See it in action

答案 2 :(得分:1)

这个怎么样:

\[\$myVar\.([^_]+)_STATE\]

匹配

[$myVar.myVar_STATE]            // matches and captures 'myvar'
[$myVar.myVar_moreMyVar_STATE]  // no match

工作正则表达式示例:

http://regex101.com/r/yM9jQ3

或者,如果_STATE是变量,您可以使用:(只要STATE部分中的文本中没有下划线。)

\[\$myVar\.([^_]+)_[^_]+\]

工作正则表达式示例:

http://regex101.com/r/kW8oE1

编辑:符合OP的评论,这应该是他的目标:

(\[\$myVar\.)([^_]+)(_[^_]+\])

正则表达式替换示例:

http://regex101.com/r/pU6yL8

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]