繁体   English   中英

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

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

工作正则表达式示例:

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")

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM