【问题标题】:Regex syntax for counting occurance of a pattern match用于计算模式匹配出现次数的正则表达式语法
【发布时间】:2016-07-12 22:02:04
【问题描述】:

我目前正在 Microsoft Exchange on Cloud、Office 365 中实施内置数据丢失防护 (DLP) 功能。我需要创建一个模式,比如说“X12345789”,该模式对组织来说是敏感的,以检查发送到外部的邮件附件组织。现在我已经使用X\d{9} 进行了测试,它工作正常。但是,我的要求是在特定文件中匹配此模式的出现次数超过 20 次。

例如:如果文件包含以下信息,

X123456789
X234561285
X873674335
X555234922
X112233445

..等等直到计数超过20,然后才采取行动。

可以根据这个需求创建正则表达式吗?

目前,我收到了对每个模式匹配的响应。我只对事务中传递的批量信息感兴趣。

此外,正则表达式应忽略 excel 中使用的其他带有空格或逗号的文本数据。 例如: 即使格式如下,它也应该检测到

X123456789 ergei slova 6284201245 HR,TA

【问题讨论】:

  • 如果您不一定需要匹配项,您可以将您的正则表达式搜索模式包含在另一个组中。如果它们都是连续的,像Regex.IsMatch(input, "(X\d{9}){20}") 这样的东西会起作用。如果它们不一定是连续的,你可以做类似Regex.IsMatch(input, "(X\d{9}[^(X\d{9})]*){20}")
  • @Meloviz 第二个成功了。非常感谢!
  • 很高兴我能帮上忙 :)
  • 看起来给定的解决方案正在部分工作。如果我将文件作为“X584278522 abc Xyz 9871114717 ADCPA2029G abcxyz@yahoo.com”在电子邮件正文或电子表格中包含超过 20 行附件,模式匹配失败。任何人都可以在这里提供帮助。

标签: c# regex office365 predicate


【解决方案1】:

假设您使用 Regex 类配置和设置了所有正则表达式,这应该非常简单。

MatchCollection matches = regex.Matches(myString); // assumes regex is Regex regex = Regex(pattern)
// OR
MatchCollection matches = Regex.Matches(myString, myPattern);
if(matches.Count > 20)
{
    /* Do something */
}

这基本上会检查您的输入,并将所有匹配项放入 MatchCollection 对象中,在该对象中可用于对匹配的令牌执行任何您需要执行的操作。

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2019-07-19
    • 2020-10-10
    • 2012-02-24
    相关资源
    最近更新 更多