与序列匹配的正则表达式

时间:2013-03-21 04:36:46

标签: c# regex

字符串集可以是这些。

1)anyNoOfcharacters< anycharacter> anyNoOfcharacters。 anyNoOfcharacters

2)anyNoOfcharacters< anychar> anyNoOfcharacters和'#'(作为最后一个字符串)

3)anyNoOfcharacters“_”anyNoOfcharacters和“#”

4)anyNoOfcharacters和anyNoOfdigits后跟“#”

可以有一个可以验证上述所有字符串的REgex吗?

这是我到目前为止所做的......

 Regex pattern = new Regex(@"^[a-zA-Z0-9\_]+[a-zA-Z0-9#.-] | [\b\w\d] |  ");

任何人都可以根据我的要求为上述模式添加条件。

提前致谢.. !!

2 个答案:

答案 0 :(得分:1)

根据您的要求,这里的正则表达式应与您列出的五个完全字符串中的任何一个匹配。如果这不是你的意思,请澄清。

 Regex pattern = new Regex(@"(ads<r>_aimDate50ms\.Good)|(ads<t>Valid#)|(tactics_priorityT)|(tactics_SelectedADS#)|(ads3bValid#)");

修改

您的要求仍然非常手工制作。让我们尝试定义一些特定的规则。我想也许我们想要:

  • 一个或多个字母,然后是
  • 零个或多个字母或数字或下划线,后跟
  • 零个或一个#字符

- 或 -

  • 一个或多个字母,然后是
  • 零个或多个字母或数字或下划线,后跟
  • 只有一个<个字符,后跟
  • 正好一个字母,后跟
  • 只有一个>个字符,后跟
  • 一个或多个字母或数字或下划线或.字符,后跟
  • 零个或一个#字符

这是在球场吗?这些规则将与您的示例匹配,但它们仍然可能不“正确”。当我说你需要具体时,这就是我的意思。如果您可以清楚地描述模式是什么,那么您可以为它编写正则表达式。如果您无法辨别一组规则来描述模式,那么就无法将其转换为正则表达式。

您能否更新您的问题,立即列出该模式的具体规则?对于模式的每个部分,我们需要知道:您期望什么样的字符或字符,以及它们中有多少可以连续出现。例如,零或更多,一个或多个,恰好一个等等。

编辑2

根据您更新的问题,我想我可以试一试。当你说“anyNoOfCharacters”时,你没有说明什么是KIND字符。但是,如果你的字面意思是任何类型的字符,包括空格,标点符号等,那么正则表达式就不会非常有用,因为它几乎可以匹配所有内容。所以我假设你的意思只是那个字母。

以下是您的规则(以及我对“anyNoOfCharacters”的假设)翻译成正则表达式:

  1. [A-Za-z]*<.>[A-Za-z]*\.[A-Za-z]*
  2. [A-Za-z]*<.>[A-Za-z]*#
  3. [A-Za-z]*_[A-Za-z]*#
  4. [A-Za-z0-9]*#
  5. 要将其转换为单个正则表达式,您可以通过在每个规则周围添加括号( )并在它们之间添加|来组合这些术语。因此我们有:

     Regex pattern = new Regex(@"([A-Za-z]*<.>[A-Za-z]*\.[A-Za-z]*)|([A-Za-z]*<.>[A-Za-z]*#)|([A-Za-z]*_[A-Za-z]*#)|([A-Za-z0-9]*#)");
    

    我猜这很接近,但可能还不完全存在。你有足够的地方可以采取这些并根据自己的需求进行改进吗?如果没有,那么请澄清更多。

答案 1 :(得分:0)

这就是你想要的

Regex pattern = new Regex(@"[^\s]+");

根据您的评论尝试此

Regex pattern = new Regex(@"(?:[^\s]*[_#\.][^\s]*)[^\s]+");