我有一个具有以下模式的字符串:
"123 456 789 \"abc def\" \"ghi\" \"jkl\" \"mno\" \"pqr\" stu v 097 \"wx yz\""
我想以这样的方式分割这个字符串:引号外的元素使用“”分割,引号内的元素使用引号分割。我为此目的使用的正则表达式是:
"(['\"])((?:\\\\\\1|.)+?)\\1|([^\\s\"']+)"
生成的输出是:
123, 456, 789, "abc def", "ghi", "jkl", "mno", "pqr", stu, v, 097, "wx yz"
这个输出很好,但问题是如果我有一个空引号,则正则表达式会弄乱输出。例如,让我们从上面的输入字符串中删除 pqr。
"123 456 789 \"abc def\" \"ghi\" \"jkl\" \"mno\" \"\" stu v 097 \"wx yz\""
本例的输出是:
123, 456, 789, "abc def", "ghi", "jkl", "mno", "" stu v 097 ", wx, yz
主要问题是“stu v 097”
。所需的输出是:
123, 456, 789, "abc def", "ghi", "jkl", "mno", "", stu, v, 097, "wx yz"
如何通过修改正则表达式来处理空字符串?
最佳答案
这个正则表达式似乎对我有用:
(?:(['"]).*?\1)|(?:[^\s"']+)
作为 Java 字符串,它是:
"(?:(['\"]).*?\\1)|(?:[^\\s\"']+)"
你可以看到它匹配什么here ,只需单击 Java。
关于java - 正则表达式:如何处理空引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34247756/