我有一个场景,我需要分开弦-

"Tom told Jerry, \"You there!\nCome here.\" \nThen Jerry responded, \"Not today.\""

在这里,我必须根据换行符拆分字符串,但如果换行符包含在双引号内("\n"),则不包括拆分.

上述字符串的输出应如下所示-

 Tom told Jerry, "You there!\n Come here."
 Then Jerry responded, "Not today."

我的代码导致-

**Tom told Jerry, 
You there!
Come here.
 
Then Jerry responded, 
Not today.**

但输出应该是-

**Tom told Jerry, 
"You there!\nCome here."
 
Then Jerry responded, "Not today."**

推荐答案

您可以使用

var text = "Tom told Jerry, \"You there!\nCome here.\" \nThen Jerry responded, \"Not today.\"";
var pattern = "(?:\"[^\"]*\"|[^\n\"])+";
var result = Regex.Matches(text, pattern);
foreach (Match m in result) 
{
    Console.WriteLine("'" + m.Value + "'");
}

请看C# demo.

Details:

  • (?:\"[^\"]*\"|[^\n\"])+ - one or more occurrences of
    • \"[^\"]*\"-a "+除"+a "以外的任何零个或多个字符
    • |-或
    • [^\n\"]-除换行符和"之外的任何字符.

Csharp相关问答推荐

如何在NodaTime中为Instant添加一年?

MongoDB.NET-将数据绑定到模型类,但无法读取整数值

应用程序重新启动后,EFCore列表的BSON反序列化错误

Azure函数中实体框架核心的依赖注入

单元测试:模拟返回空

如何在用户在线时限制令牌生成?

有没有类似于扩展元素的合并元组的语法?

避免只读记录 struct 中的防御副本

如何让两个.NET版本不兼容的项目对话?

将操作从编辑页重定向到带参数的索引页

.Net MAUI,在将FlyoutPage添加到容器之前,必须设置添加构造函数导致Flyout和Detail"

Celler ArgumentExpression是否期望在所有情况下都捕获允许空值的运算符?

将FileStream的特定部分作为字节数组读取

我的命名管道在第一次连接后工作正常,但后来我得到了System.ObjectDisposedException:无法访问关闭的管道

为什么当我try 为玩家角色设置动画时,没有从文件夹中拉出正确的图像?

为什么Swashbakle/Swagger在参数中包含变量名?

在使用.NET EF Core DbContext属性之前,是否应使用null判断

缩写的MonthNames有问题

Windows 10上埃及标准时间的时区偏移不正确

不寻常的C#语法