我正在写一个正则表达式来转换以下内容:
string input = @"
{b sub}{b or}{b di}{b nate} def1...
{b sub}{b tro}{b pi}{b cal} def2...
{b su}{b per} def3...
{b sum} def4...
";
对此:
'subordinate': def1...
'subtropical': def2...
'super': def3...
'sum': def4...
即,我需要删除'{b'和'}'并装饰它,等等。
我不确定该怎么做。我知道如何匹配{b }
,但不知道如何匹配所有Regex.Replace(input, @"(\{b (?<Text>[^ }]+)})+", @"'${Text}'")
,并用引号将其修饰。
'nate' def1...
'cal' def2...
'per' def3...
'sum' def4...
返回
None
即,在给定实例...中的最后一个匹配项。不知道如何引用文本的“所有”组,而不仅仅是给定实例中的最后一组。
对不起,我什至找不到“给定实例”的专有名称...。
答案 0 :(得分:3)
您可以将重复的子字符串与CGAL::write_ply_point_set(out, points)
进行匹配,然后在匹配评估器部分解开单独的大括号子字符串,并根据需要设置整个匹配的格式。
这里是一个例子:
CGAL::Vector_3
请参见C# demo,输出:
unsigned char
Regex.Replace
表达式匹配string input = @"{b sub}{b or}{b di}{b nate} def1...
{b sub}{b tro}{b pi}{b cal} def2...
{b su}{b per} def3...
{b sum} def4... ";
string result = Regex.Replace(input, @"(?:\{b\s+[^{}]*})+", m =>
"'" + Regex.Replace(m.Value, @"\{b\s+([^{}]*)}", "$1") + "':");
Console.WriteLine(result);
的1个或多个重复,1 +个空格,然后匹配'subordinate': def1...
'subtropical': def2...
'super': def3...
'sum': def4...
和(?:\{b\s+[^{}]*})+
以外的0个或更多个字符,直至并包括{{ 1}},然后找到匹配项时,将使用{b
正则表达式处理该匹配项,该正则表达式仅匹配1个这样的序列,并捕获{
+空格之后和}
替换之前的部分包含第1组内容。
答案 1 :(得分:2)
尝试一下:
string input = @"
{b sub}{b or}{b di}{b nate} def1...
{b sub}{b tro}{b pi}{b cal} def2...
{b su}{b per} def3...
{b sum} def4...
";
input = input.Replace("{b ", "").Replace("}", "");
input = Regex.Replace(input, @"\n\s+(\w+)", @"\n'$1':");
模式说明:
\n\s+(\w+)
-匹配换行符,一个或mroe空格,然后匹配一个或多个单词字符并将其存储在捕获组中。
答案 2 :(得分:1)
您可以使用\{b (?<Text>[^}]+)\}
作为模式,并在将${Text}
最初替换为\{.*\}
之后,将其替换为'${0}':
。
当然,多行。