我正在尝试使用正则表达式来确定要重复多少个和哪些组。
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
请注意,为了清晰起见,我将aaa
与aaaaaa
bbbbbbbbbbbbb
和c
分开了。实际输出的单词之间不会有空格或换行符。
规则:
1) n
中可能有a-zA-Z0-9$
个带有字符的单词。在上面的示例中,$$$
和12345
是单词。
2):一个单词可以包含n
个重复字符的组。例如。 aaa
和a
3):单词和单词内的群组有什么区别?例如。 12345
和aab
有什么区别。
答案::12345
没有重复的元素。因此,这保持不变,没有任何进一步的细分。但是,aab
有一个重复的字符a
,因此它将被分解为aa
和b
。
4)输出(由组组成)在组之前或之后必须没有空格或换行符。
我能够将单词彼此分开。这很简单。我使用了r[$0-9a-zA-Z]+
,但是我不确定如何在单词中分隔组。即如何将a000000009999999888888
分成a
00000000
9999999
888888
?
我将不胜感激。预先感谢。
这是我的regex101工作表:REGEX101
答案 0 :(得分:1)
如果支持否定前瞻,则可以使用alternation和2个捕获组。
([a-z0-9$])\1+|(?:([a-z0-9$])(?!\2))+
([a-z0-9$])\1+
通过捕获组1的字符类中的字符,然后重复一次或多次重复组1来匹配连续的字符|
或(?:
非捕获组
([a-z0-9$])
匹配角色类中的内容并在第2组中捕获(?!\2)
负向断言来断言所跟的不是第二组)+
关闭非捕获组并重复一次或多次