没有单词匹配的正则表达式

时间:2013-10-02 16:57:40

标签: c# regex

我有这个表达:

-a bp cd 4 -6 3 -n sig3 -p 0.5 0.7

我想匹配-a-n之间的所有内容。这意味着前缀和后缀为:-,带有一个字母。

我的开头是:(?<=-a )(?<ida>[^-]*)

但我还要把这封信排除在外。

请注意,-n可以是之前的任何其他字母,并且仅在运行时知道。

我该怎么做?

感谢所有的答案,我终于破解了它:
(?&lt; = - a)(?。*?(?= - [a-z] | $))

2 个答案:

答案 0 :(得分:0)

你可以这样做:

(?<=-a )(?>[^ ]+| (?!-n))*(?= -n)

这个表达式的兴趣在于避免延迟量词并在开头和结尾修剪空格。

详细说明:

(?<=-a )          # preceded by `-a `
(?>               # open an atomic group (non-capturing)
    [^ ]+         # all that is not a space
  |               # or
    [ ](?!-n)     # a space not followed by `-n`
)*                # repeat the group zero or more times
(?= -n)           # check if ` -n` follows

答案 1 :(得分:0)

如果我理解正确,你的模式是:

  • ' - a'后跟
  • 任何不是短划线[^-]或短划线,后跟不是字母-[^a-z]的字符重复一次或多次,然后是
  • 短划线和字母-[a-z]

这个正则表达式应该这样做:

(?<=-a)([^-]|-[^a-z])+(?=-[a-z])