java - 用于选择字符出现奇数次的字符串的正则表达式

标签 java regex string

我正在尝试创建一个正则表达式,该正则表达式将选择引号字符出现在奇怪的情况下的单词。我被困住了...

假设我有这 4 个字符串:

  • 你好
  • pl'pl'op
  • '黑格尔
  • qwe'rty

我应该得到这个列表作为返回:

  • 你好
  • '黑格尔
  • qwe'rty

我在兜圈子,我什至不知道是否可以在正则表达式中做到这一点。我不太擅长正则表达式。

我是否应该循环所有字符串的每个字符,计算引号的数量并进行模运算来检查数字是否为奇数?

最佳答案

代码

See regex in use here

^(?!(?:\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/

相关文章:

python - 删除列表中字符串中的日期和年份重复项

c# - 正则表达式 c# 可选组 - 应该贪婪吗?

java - String.format 返回使用逗号作为分隔符的 double 值

java - 如何检查方法中的多个条件并根据其返回值执行某些操作

java - ConcurrentModificationException 定时器任务

javascript 正则表达式 向后查找

c++ - 将字符串转换为 LPCWSTR 以供 CreateFile() 寻址串行端口

c# - 在 WPF 中对齐字符串

java - 微服务和maven结构

java - Spring MVC - 页面之间的变量,以及取消设置 SessionAttribute