我正在尝试为C#编写正则表达式

时间:2017-07-19 04:31:27

标签: c# regex

我的目标是找到开始和结束模式并将其从长字符串中删除

{BEGIN:781}{hopi_docgen4}{sub_chronic_conditions_hpi}{END:}{OPh_cc_docgen}{END:621}{BEGIN:768}{cc_reviewed} {cc_rev_prov}{END:768}

必需的regx应满足此=> 开始和结束后跟一个完整的冒号然后跟着整个数字,所有这些都用大括号括起来,就像这个{}一样,无论情况如何都必须正常工作

{Begin:100} or {end:112} or {BEGIN:105} or {END:398}

目前我的解决方案是

\b{begin:[0-1][0-1][0-1]}\b

3 个答案:

答案 0 :(得分:1)

您可以使用单个正则表达式替换:

public string FindMacroType(string sentence)
{
    return Regex.Replace(sentence, @"(?i){(?:END|BEGIN):[0-9]{3}}", "");
}

请参阅regex demo

模式详情

  • (?i) - 不区分大小写的修饰符
  • { - 文字{(无需逃避,但你可以)
  • (?:END|BEGIN) - endbegin
  • : - 冒号
  • [0-9]{3} - 3个ASCII数字(如果可以有1位或更多位数,只需将{3}限制量词替换为匹配1次或多次出现次数的+量词数。
  • } - 文字}(无需转义)。

答案 1 :(得分:0)

感谢所有的负面投票; 我找到了答案;

public string FindMacroType(string sentence)
{

    Regex begin = new Regex(@"(\{)(BEGIN\:)[0-9][0-9][0-9](\})",RegexOptions.IgnoreCase);
    sentence = begin.Replace(sentence,"");

    Regex end = new Regex(@"(\{)(END\:)[0-9][0-9][0-9](\})", RegexOptions.IgnoreCase);
    sentence = end.Replace(sentence, "");

    return sentence;
}

答案 2 :(得分:-1)

在我看来,正则表达式已被过度使用。它只应在字符串方法不起作用或变得太复杂时使用。在这种情况下,我认为字符串方法更好:

private boolean isSensorAvialable() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            return ActivityCompat.checkSelfPermission(AppContext, Manifest.permission.USE_FINGERPRINT) == PackageManager.PERMISSION_GRANTED &&
                    AppContext.getSystemService(FingerprintManager.class).isHardwareDetected();
        } else {
            return FingerprintManagerCompat.from(AppContext).isHardwareDetected();
        }
    }