【问题标题】:Regex split a string正则表达式拆分字符串
【发布时间】:2011-10-19 17:34:33
【问题描述】:

我束手无策(作为一个正则表达式新手)。我需要像这样拆分字符串

"abc","","av,as","hello world","nice,name"

进入

'abc'
'\blank\'
'av,as'
'hello world'
'nice,name'

使用 c# 或 excel vbs,有人可以帮忙处理正则表达式吗?

【问题讨论】:

  • 这看起来像您正在尝试使用 CSV 文档。我建议为此使用一个库(参见secretgeek.net/csv_trouble.asp
  • 你有问题。 “我将使用正则表达式来解决它!”现在你有两个问题。
  • 我不认为正则表达式是解决这个问题的方法。我会遍历字符串以查找开始和结束引号。
  • @JesseSeger:我不会,因为如果他有一个包含转义引号的字符串怎么办? "abc\"123" 会导致迭代失败。我会听从 Factor Mystic 的建议并使用 CSV 解析库。
  • @Jesse 即使是家庭作业,我也看不出有什么问题 - 这个或几乎任何在线论坛的全部意义在于帮助某人解决他们遇到的问题- 这就是它在现实生活中的运作方式,学校应该让你为现实生活做好准备,对吧?

标签: c# regex vba


【解决方案1】:

相当简单:

"(\\.|[^"\\])*"

将如图所示工作:

它将允许转义引号和引号之间可能的空格,并且符合 POSIX,如果您需要的话!

编辑

我可能应该注意到,基本上不可能从正则表达式引擎直接获取您指定的'\blank\',但从检查长度的代码中获取它相对简单如果长度小于三个字符,则匹配并替换它(因为如果存在空字符串,则匹配将是 ""

结束编辑

请问您是否希望我分解表达式!

【讨论】:

  • 完美解决方案。效果很好。谢谢。
【解决方案2】:

我认为你应该使用

"(.*?)",?

正则表达式

示例:http://regexr.com?2uvk8

【讨论】:

  • 不会找到转义引号,也不会忽略内部逗号。
  • 大部分都有效,但正如 Jesse 所提到的,并不是完全万无一失的。不过谢谢你的回答。
【解决方案3】:
(?:"((?:[a-z])+(?:[ ,a-z]+))")?("")? 

可以使用

如果组 1 和 2 是 emtpy,则匹配 , 如果组 1 具有匹配字符串的值,如果组 2 具有匹配的值则匹配 emtpy 双引号 ""

但是如前所述,您应该使用解析器来提高速度和准确性...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2011-06-18
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多