正则表达式替换 C# 中的标签
Regex replace tags in C#
我正在用 C# 制作一个小型解析器。
我要解析的字符串是:
Hello [Name] [LastName] how are you? [FirstTime]this is your first time isnt it?[/FirstTime] Bye!
我的 [Name] 和 [LastName] 的 C# 代码是:
message = message
.Replace("[FirstName]", user.FirstName)
.Replace("[LastName]", user.LastName)
bool isFirstTime = user.FirstLogin;
我的问题在[FirstTime] [/FirstTime]
之间。如果 isFirstTime
为真,我想保留标签之间的字符串,如果为假,我想丢弃标签内的文本。
知道我该如何解决这个问题吗?
示例结果:
Hello James Bond how are you? this is your first time isnt it? Bye!
编辑:我忘了说示例字符串只是一个很好的示例,字符串是 "user defined" 所以使用 stringbuilder 不会在我的工作案例.
使用此正则表达式模式查找和替换 FirstName 块:
[[FirstTime]](.*)[[/FirstTime]]
那么您的代码可能是:
Regex rgx = new Regex("[[FirstTime]](.*)[[/FirstTime]]");
File.WriteAllText("", rgx.Replace("Hello [Name] [LastName] how are you? [FirstTime]this is your first time isnt it?[/FirstTime] Bye!", "Ali"));
您可以使用字符串生成器class:
StringBuilder builder = new StringBuilder();
builder.Append("Hello ");
//Name
builder.Append(Name);
builder.Append(" ");
builder.Append(LastName);
builder.Append(" How are you? ");
//First time
if(FirstTime){
builder.Append(" This is your first time isn't it? ");
}
//Bye
builder.Append(" Bye!");
//Convert to string
String sentence = builder.ToString();
这是您可能正在寻找的正则表达式方式:
var FirstLogin = false;
var FirstName = "James";
var LastName = "Bond";
var message = "Hello [FirstName] [LastName] how are you? [FirstTime]this is your first time isnt it?[/FirstTime] Bye!";
message = message
.Replace("[FirstName]", FirstName)
.Replace("[LastName]", LastName);
var isFirstTime = FirstLogin;
if (FirstLogin)
message = Regex.Replace(message, @"\[/?FirstTime\]", string.Empty);
// Hello James Bond how are you? this is your first time isnt it? Bye!
else
message = Regex.Replace(message, @"\[FirstTime\].*?\[/FirstTime\]", string.Empty);
// Hello James Bond how are you? Bye!
正则表达式解释:
\[/?FirstTime\]
- 按字面意思匹配 [FirstTime]
或 [/FirstTime]
\[FirstTime\].*?\[/FirstTime\]
- 匹配最近出现的 [FirstTime]
和 [/FirstTime]
之间的任何文本(不考虑嵌套的 BBtags)。
如果您有嵌套标签,您可以考虑使用 2 个正则表达式:
\[FirstTime\](?:(?!\[/?FirstTime\]).)*\[/FirstTime\]
上面这个将匹配最接近的一对 FirstTime
标签。而下面的可以匹配最远的那些:
\[FirstTime\](?:\[([^]]*)\].*?\[/\]|.*?)*\[/FirstTime\]
我正在用 C# 制作一个小型解析器。
我要解析的字符串是:
Hello [Name] [LastName] how are you? [FirstTime]this is your first time isnt it?[/FirstTime] Bye!
我的 [Name] 和 [LastName] 的 C# 代码是:
message = message
.Replace("[FirstName]", user.FirstName)
.Replace("[LastName]", user.LastName)
bool isFirstTime = user.FirstLogin;
我的问题在[FirstTime] [/FirstTime]
之间。如果 isFirstTime
为真,我想保留标签之间的字符串,如果为假,我想丢弃标签内的文本。
知道我该如何解决这个问题吗?
示例结果:
Hello James Bond how are you? this is your first time isnt it? Bye!
编辑:我忘了说示例字符串只是一个很好的示例,字符串是 "user defined" 所以使用 stringbuilder 不会在我的工作案例.
使用此正则表达式模式查找和替换 FirstName 块:
[[FirstTime]](.*)[[/FirstTime]]
那么您的代码可能是:
Regex rgx = new Regex("[[FirstTime]](.*)[[/FirstTime]]");
File.WriteAllText("", rgx.Replace("Hello [Name] [LastName] how are you? [FirstTime]this is your first time isnt it?[/FirstTime] Bye!", "Ali"));
您可以使用字符串生成器class:
StringBuilder builder = new StringBuilder();
builder.Append("Hello ");
//Name
builder.Append(Name);
builder.Append(" ");
builder.Append(LastName);
builder.Append(" How are you? ");
//First time
if(FirstTime){
builder.Append(" This is your first time isn't it? ");
}
//Bye
builder.Append(" Bye!");
//Convert to string
String sentence = builder.ToString();
这是您可能正在寻找的正则表达式方式:
var FirstLogin = false;
var FirstName = "James";
var LastName = "Bond";
var message = "Hello [FirstName] [LastName] how are you? [FirstTime]this is your first time isnt it?[/FirstTime] Bye!";
message = message
.Replace("[FirstName]", FirstName)
.Replace("[LastName]", LastName);
var isFirstTime = FirstLogin;
if (FirstLogin)
message = Regex.Replace(message, @"\[/?FirstTime\]", string.Empty);
// Hello James Bond how are you? this is your first time isnt it? Bye!
else
message = Regex.Replace(message, @"\[FirstTime\].*?\[/FirstTime\]", string.Empty);
// Hello James Bond how are you? Bye!
正则表达式解释:
\[/?FirstTime\]
- 按字面意思匹配[FirstTime]
或[/FirstTime]
\[FirstTime\].*?\[/FirstTime\]
- 匹配最近出现的[FirstTime]
和[/FirstTime]
之间的任何文本(不考虑嵌套的 BBtags)。
如果您有嵌套标签,您可以考虑使用 2 个正则表达式:
\[FirstTime\](?:(?!\[/?FirstTime\]).)*\[/FirstTime\]
上面这个将匹配最接近的一对 FirstTime
标签。而下面的可以匹配最远的那些:
\[FirstTime\](?:\[([^]]*)\].*?\[/\]|.*?)*\[/FirstTime\]