我有一个包含多个引号的单个字符串,即:
“布鲁斯·韦恩”“43”“男”“哥谭”
我想创建一个使用正则表达式的方法,根据位置从字符串中提取某些值。
例如,如果我传递 Int 值 1 和 3,它应该返回一个字符串: “布鲁斯·韦恩”“男”
请注意双引号是字符串的一部分,并且是转义字符 (\")
最佳答案
如果(可能的)组数已知,您可以使用正则表达式,如 "(.*?)"\s*"(.*?)"\s*"(.*?)"\s*"(.*?)"
以及Pattern
和Matcher
并按编号访问组(组 0 将始终是第一个匹配项,组 1 将是表达式中的第一个捕获组,依此类推)。
如果组数未知,您可以使用表达式 "(.*?)"
并使用Matcher#find()
也在循环中应用表达式并将所有匹配项(在这种情况下为组 0)收集到列表中。然后使用索引访问列表元素(元素 1 将位于索引 0)。
另一种选择是使用 string.replaceAll("^[^\"]*\"|\"[^\"]*$","").split("\"\\s*\"")
,即删除前导和尾随双引号及其之前或之后的任何文本,然后在引号上拆分,中间有可选的空格。
示例:
- 假设字符串
optional crap before "Bruce Wayne" "43" "male" "Gotham" optional crap after
-
string.replaceAll("^[^\"]*\"|\"[^\"]*$","")
将导致Bruce Wayne" "43" "male" "Gotham
- 正在申请
split("\"\\s*\"")
上一步的结果将产生数组[Bruce Wayne, 43, male, Gotham]
- 然后只需通过索引(从零开始)访问数组元素
关于java - 根据位置提取双引号之间的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36178128/