正则表达式计算字符串中单引号的数量,不包括2个连续的双引号

时间:2017-07-19 07:11:21

标签: java regex string

我需要计算单个引号出现在字符串中的次数,但不包括单引号后面紧跟单引号的情况。

示例:

'singlequote','another single quote' 

应该给出计数4和

'singlequote','2 quote'' inside single quote' 

也应该给出计数4

我做了这个

char quote= '\'';
int count2 = string.replaceAll("[^"+ quote +"]", "").length();

但这会计算所有出现的情况。

有没有办法在正则表达式中执行此操作,或者我是否需要遍历所有字符。有人可以帮忙解决这个问题吗

3 个答案:

答案 0 :(得分:2)

您可以使用此基于查找的正则表达式来匹配任何单引号之前或之后的单引号。请注意,它将跳过所有多个引号的情况,因此不会匹配双引号或三引号。

(?<!')'(?!')

RegEx Demo

RegEx分手:

  • (?<!') - 断言前一个字符不是单引号
  • ' - 匹配单引号
  • (?!') - 如果下一个字符不是单引号,则断言

答案 1 :(得分:2)

您可以替换字符串中的所有''|[^']。它将替换所有 2单引号以及除单引号外的所有其他内容。

示例:

int count2 = string.replaceAll("''|[^']", "").length();

其中包含输出4;

见DEMO:https://ideone.com/PqtRu6

答案 2 :(得分:1)

这是另一种方法,用空字符串替换所有2连续引号并计算出现次数:

StringUtils.countOccurrencesOf(yourString.replaceAll("''", ""), "'")

确保导入:

import org.springframework.util.StringUtils;