Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匹配前缀后按空格分隔的字符序列 我有以下字符串: -前缀,其中第二部分(例如,)可以无限次重复(仅数字变化) -前缀14122296950480701,其行为应与上述相同 -前缀14122296950480701,仍然可以永远重复_C#_Regex - Fatal编程技术网

C# 匹配前缀后按空格分隔的字符序列 我有以下字符串: -前缀,其中第二部分(例如,)可以无限次重复(仅数字变化) -前缀14122296950480701,其行为应与上述相同 -前缀14122296950480701,仍然可以永远重复

C# 匹配前缀后按空格分隔的字符序列 我有以下字符串: -前缀,其中第二部分(例如,)可以无限次重复(仅数字变化) -前缀14122296950480701,其行为应与上述相同 -前缀14122296950480701,仍然可以永远重复,c#,regex,C#,Regex,最后一个组应包含14122296950480701和14122296950480702 因此,一些信息: 数字链总是总共18个,所以我在正则表达式中使用\d{18} 我想把这些数字分组,以便以后使用 我试过的 首先,我尝试匹配我的第一个示例字符串。 -前缀(\s)\1*,它将匹配整个字符串,但我希望数字本身在它自己的组中。此外,此方法仅匹配相同的部分,例如,将匹配,但中间的任何其他数字都不匹配 在我脑子里什么听起来合乎逻辑 -前缀(\d{18})+,但它将只匹配“数字部分”中的第一个 当我在

最后一个组应包含
14122296950480701
14122296950480702

因此,一些信息:
  • 数字链总是总共18个,所以我在正则表达式中使用\d{18}
  • 我想把这些数字分组,以便以后使用
我试过的 首先,我尝试匹配我的第一个示例字符串。
-前缀(\s)\1*
,它将匹配整个字符串,但我希望数字本身在它自己的组中。此外,此方法仅匹配相同的部分,例如,
将匹配,但中间的任何其他数字都不匹配

在我脑子里什么听起来合乎逻辑
-前缀(\d{18})+
,但它将只匹配“数字部分”中的第一个

当我在regex101上测试它时,它告诉我:

重复捕获组将只捕获最后一次迭代。在重复组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组


我尝试将正则表达式调整为以下
-前缀((\d{18})+
,但结果相同。

在注释中@madreflection的帮助下,我能够想出这个解决方案:

-前缀([\s]*(?)+

这正是我所需要的,它甚至忽略了中间的空格。此外,通过使用
匹配.Groups[“digits”]。捕获
,整个故事变得更加简单。

您可以使用列出3种不同的允许格式。在.NET中,支持重用组名

-prefix\s*(?:(?<digits>[0-9]{18})\s*<@(?<digits>[0-9]{18})>|(?<digits>[0-9]{18})|<@(?<digits>[0-9]{18}))

NET正则表达式引擎捕获所有重复的组,因此注释在此不相关。
-前缀(\s)+
..
匹配.groups[“digits”]。捕获
。这应该适用于您提到的第一种格式。(
\d
可以匹配其他数字,而不仅仅是0-9。)这看起来已经很好了,有没有办法让最后的
成为可选的?Use可以使用三种模式进行交替:
(…|…|…)
,省略号所在的三种变体。这很难理解,但对于我来说,就这么简单。这是另一种选择:请记住,这会给输入带来误报,如
-prefix@14122296950480701>
(请注意缺少的
嗯,缺少的空格实际上是可以的,但是对于其他您正确的内容,将在一瞬间更新答案。@jorgandersantanaureña,因为我需要确保其他内容也存在。
-prefix\s*(?:(?<digits>[0-9]{18})\s*<@(?<digitsBrackets>[0-9]{18})>|(?<digits>[0-9]{18})|<@(?<digitsBrackets>[0-9]{18}))