【问题标题】:Textparsing and splitting text including/excluding quotation marks文本解析和分割文本,包括/不包括引号
【发布时间】:2011-01-20 21:55:30
【问题描述】:

我的问题与我在此处找到的较早条目几乎相同,但不完全相同。

我需要解析一个文本文件,其中数据的结构是这样的: 文件中的每一项都以# 开头,后跟标签。 帖子中的字段由一个或多个空格分隔。

这是我遇到问题的部分。 每个字段可以用引号括起来也可以不用引号,仅当数据包含空格时才需要。

所以我要的是一个由空格分割的正则表达式,但如果空格在引号内,则不是。

目前我为每个标签使用单独的正则表达式,然后从文件中读取时立即拆分它会更有效。 至于下面的账号例子(^#[A-z]+)\s([0-9]+)\s(.+)

数据示例

#ACCOUNT 7059 "Misc. travelexpenses"
#ADRESS "M. Jackson" "somewhere over the rainbow" WI53233-1704 555-12345

【问题讨论】:

  • 是否有引号嵌入在带引号的字符串中,如果是,它们将如何转义,即"Two by four (2""x4"")""Two by four (2\"x4\")"

标签: c# regex quotes escaping


【解决方案1】:

您可以使用“OR”构造来定义字段的可能形式。 喜欢

([A-z]+|"[^"]+") 

同时匹配 Kring 和“Mr. Kring”。

编辑:因此,要获取上述记录中的所有字段和标签,您可以使用

(?:^#|\s+)([^"#\s]+|"[^"]+")

http://gskinner.com/RegExr/ 是测试正则表达式的好方法。

【讨论】:

  • 使用\S+ 而不是[A-z]+
  • \S 命中非空白字符,不是吗?嗯.. 看看上面给出的数据,这可能就是 Kring 想要的。我只是想展示如何使用 or 构造。
  • 但是如果我想排除匹配项怎么办?在这种情况下,查找除引号内的所有空格之外的所有空格。这是一个问题:拆分为 4 个部分这是“一个问题”:拆分为 3 个部分
  • 随便切换一下:("[^"]+"|\S+)
  • 请原谅我这么密集,但这不是和我问的完全相反吗?但也许它已经足够接近了:) 谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 2023-01-01
  • 2010-09-27
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多