正则表达式忽略多个错误的引号

时间:2018-06-29 08:37:43

标签: regex

从此输入:

""" "01-01-2000""" " ",""" "Bank123""" "", "" ""Example text" " "",

我要提取:

01-01-2000
Bank123
Example text

我设法做到这一点:

(["'])(?:(?=(\\?))\2.)*?\1

但是如果处理许多错误的引号会失败。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

有多种选择:

1) ([\d-\w\s][\d-\w\s]+)
2) ([\d-\w\s]{2,})
3) "\b(.+?)\b"
4) \b([^"]{2,})\b

演示:https://regex101.com/r/jPXqKv/1

测试:

""" "01-01-2000""" " ",""" "Bank123""" "", "" ""Example text" " ""

匹配:

Match 1
Full match  5-15    `01-01-2000`
Group 1.    5-15    `01-01-2000`
Match 2
Full match  28-35   `Bank123`
Group 1.    28-35   `Bank123`
Match 3
Full match  48-60   `Example text`
Group 1.    48-60   `Example text`

答案 1 :(得分:0)

如我所见,您对以下字符串感兴趣:

  • 以数字或字母开头
  • 紧接着是"以外的其他字符序列(可能为空)。

因此,直观的解决方案是[a-z\d][^"]*gi选项 (全局,不区分大小写)。

答案 2 :(得分:0)

对于您给定的示例,也许可以选择将空格或双引号匹配零次或更多次[ "]*以匹配内部双引号之间的值之前的内容。

然后使用否定的字符类匹配双引号并将其捕获而不是双引号或换行符([^"\r\n]+)

在末尾匹配双引号,后跟零个或多个空格或双引号,这将匹配后面的内容,因此该组与双引号之间的空格不匹配。

[ "]*"([^"\r\n]+)"[ "]*