使用正则表达式提取单词中的组数和组数

时间:2018-09-28 08:49:17

标签: regex

我正在尝试使用正则表达式来确定要重复多少个和哪些组。

Input String= $$$ 12345 aaa bbb ccc ddd eee 678 $$$ aaabbbbccc aaa-bbb-ddd aab aaaaaabbbbbbbbbbbbbc a000000009999999888888

Expected Output = 
$$$ 
12345 
aaa  
bbb  
ccc  
ddd  
eee  
678 
$$$ 

aaa
bbbb
ccc 

aaa
bbb
ddd 

aa
b 

aaaaaa
bbbbbbbbbbbbb
c 

a
00000000
9999999
888888

请注意,为了清晰起见,我将aaaaaaaaa bbbbbbbbbbbbbc分开了。实际输出的单词之间不会有空格或换行符。

规则:

1) n中可能有a-zA-Z0-9$个带有字符的单词。在上面的示例中,$$$12345是单词。

2):一个单词可以包含n个重复字符的组。例如。 aaaa

3):单词和单词内的群组有什么区别?例如。 12345aab有什么区别。

答案:12345没有重复的元素。因此,这保持不变,没有任何进一步的细分。但是,aab有一个重复的字符a,因此它将被分解为aab

4)输出(由组组成)在组之前或之后必须没有空格或换行符。

我能够将单词彼此分开。这很简单。我使用了r[$0-9a-zA-Z]+,但是我不确定如何在单词中分隔组。即如何将a000000009999999888888分成a 00000000 9999999 888888

我将不胜感激。预先感谢。

这是我的regex101工作表:REGEX101

1 个答案:

答案 0 :(得分:1)

如果支持否定前瞻,则可以使用alternation和2个捕获组。

([a-z0-9$])\1+|(?:([a-z0-9$])(?!\2))+

Regex demo

  • ([a-z0-9$])\1+通过捕获组1的字符类中的字符,然后重复一次或多次重复组1来匹配连续的字符
  • |
  • (?:非捕获组
    • ([a-z0-9$])匹配角色类中的内容并在第2组中捕获
    • (?!\2)负向断言来断言所跟的不是第二组
  • )+关闭非捕获组并重复一次或多次

您没有指定任何工具或语言,仅是示例如何在PhpPython中获得完整匹配。