我有一个仅包含由定界符分隔的数字的文本文件。除数字外,分隔符可以是逗号,空格,换行符等。
1, 2, 3, 4
1 2 3 4
1|2|3|4
1hello2hello3hello4
我正在寻找一个正则表达式来匹配整个文本文件中的这种重复模式。预期结果将是“找到匹配项”或“找不到匹配项”。澄清,如果文本以数字和空格作为分隔符开头,则应使用此模式重复整个文本。因此,如果在文本中的某处有类似以下内容:
12 34 56,78
比赛应该中断并返回没有找到的比赛。
最佳答案
您可以使用以下正则表达式获取用作连续数字串之间定界符的固定字符串,或者得出结论,至少两个定界符不相等。如果存在匹配项,则分隔符字符串将是捕获组1的内容。如果存在多个不同的分隔符,则尝试的匹配将失败。
^\d+(\D+)\d+(?:\1\d+)*$
然后可以在捕获组1的内容上拆分字符串,以提取连续数字的组。Start your engine! 2
例如,如果字符串是:
1¯\_(ツ)_/¯2¯\_(ツ)_/¯3¯\_(ツ)_/¯4
匹配将成功,捕获组1将包含'¯\_(ツ)_/¯'
。另一方面,如果字符串是:
1¯\_(ツ)_/¯2¯\_(:-)_/¯3¯\_(ツ)_/¯4
匹配失败,因为并非所有分隔符都相同。正则表达式引擎执行以下操作。
^ : match beginning of string
\d+ : match 1+ digits
(\D+) : match 1+ non-digits in capture group 1
\d+ : match 1+ digits
(?:\1\d+) : match the content of capture group 1 followed by 1+ digits
in a non-capture group
* : execute the non-capture group 0+ times
$ : match end of string
1.我使用PCRE(PHP)regex引擎进行了测试,但是C++ regex引擎会给出相同的结果。
关于c++ - 正则表达式匹配数字的重复模式,后跟任何类型的定界符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62493020/