我正在尝试创建一个正则表达式,该正则表达式将选择引号字符出现在奇怪的情况下的单词。我被困住了...
假设我有这 4 个字符串:
- 你好
- pl'pl'op
- '黑格尔
- qwe'rty
我应该得到这个列表作为返回:
- 你好
- '黑格尔
- qwe'rty
我在兜圈子,我什至不知道是否可以在正则表达式中做到这一点。我不太擅长正则表达式。
我是否应该循环所有字符串的每个字符,计算引号的数量并进行模运算来检查数字是否为奇数?
最佳答案
代码
^(?!(?:\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']+
匹配一个或多个单词字符或撇号'
$
断言位置位于行尾
关于java - 用于选择字符出现奇数次的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47634635/