我正在尝试创建一个正则表达式,它将选择引用字符出现在奇数出现的单词。我被卡住了......
假设我有这4个字符串:
我应该得到这个清单:
我在圈子里跑来跑去,我甚至不知道是否有可能在正则表达式中这样做。我在正则表达式方面不太好。
我应该只循环所有字符串的每个字符,计算引号数量并进行模运算以检查数字是否为奇数?
答案 0 :(得分:3)
^(?!(?:\w*'\w*'\w*)+$)[\w']+$
根据我的问题下面的评论,可以通过将非捕获组更改为原子组来进行改进,如以下模式所示。这项优化归功于@Thefourthbird:
^(?!(?>\w*'\w*'\w*)+$)[\w']+$
hello'
pl'pl'op
'heger
qwe'rty
q'
q'q'
q'q'q'
q'q'q'q'
q'q'q'q'q'
q'q'q'q'q'q'
q'q'q'q'q'q'q'
q'q'q'q'q'q'q'q'
q'q'q'q'q'q'q'q'q'
以下只显示匹配
hello'
'heger
qwe'rty
q'
q'q'q'
q'q'q'q'q'
q'q'q'q'q'q'q'
q'q'q'q'q'q'q'q'q'
^
在行首处断言位置(?!(?:\w*'\w*'\w*)+$)
否定前瞻确保后续内容不匹配
(?:\w*'\w*'\w*)+
匹配撇号和单词字符的任意组合,其中撇号字符恰好出现两次,一次或多次(这意味着2,4,6,8,10,...次)$
断言行尾的位置[\w']+
匹配一个或多个单词字符或撇号'
$
断言行尾的位置答案 1 :(得分:0)
你不需要正则表达式。只需检查countMatches
是否返回奇数
public class Main {
public static void main(String[] args) {
String check = "pl'pl'op";
System.out.println("Ocurrences: " + StringUtils.countMatches(check, "'"));
}
}
输出:Ocurrences: 2
答案 2 :(得分:0)
试试这个:
([^']*'[^']*'[^'])*[^']*'[^']*
这个想法是在组中捕获偶数(可能是0)引号,以及它们之间的文本,然后再引用一个引号。