我的格式为长字符串:
' Random Key : Random Value\n Random Long Key : Random Long Value\n...'
等等。 我想把它改成
Random Value:Random Key, Random Long Value:Random Long Key,...
使用正则表达式。我可以通过
匹配单个单词\w+
但为了匹配我正在做的多个单词
\w+(\s\w+)*
但那并没有给我想要的结果。
答案 0 :(得分:0)
您可以使用这段代码来查找键值对:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var regex = new Regex(@"\s*(?<key>(\w+\s?\w+)*)\s*:\s*(?<val>(\w+\s?\w+))\s*");
var input = @" Key : Value\n Long Key : Long Value\n...";
Console.WriteLine(regex.Replace(input, "${key}:${val}").Replace("\\n", ", "));
}
}
技巧是匹配“任意数量(至少一个单词字符,一个可选空格,至少另一个单词字符)”,它为我们找到带空格的键。最短的无空格键虽然是两个字符。
我承认转义的换行符不会被正则表达式替换,但这样表达式和代码都非常简单。
答案 1 :(得分:0)
如果你的\n
确实是字符串的一部分,你可以匹配并替换它:
/(?:\s*([^\\]+?)\s*:\s*([^\\]+?)\s*)+\\n/g
并用
代替$1:$2,
如果你逐行使用它,那么它就更容易了,因为你可以使用多行匹配:
/^\s*(.+?)\s*:\s*(.+?)\s*$/mg
并将其替换为
$1:$2,
答案 2 :(得分:0)
其他答案都没有完全适合我,因为他们在最后一个词之后保持匹配。按预期工作的正则表达式是
(\w+(?:\s\w+)*)