这些是正确的正则表达式

时间:2012-08-21 18:42:22

标签: c# regex

我正在尝试在我的语法荧光笔中使用一些正则表达式字符串,如果我第一次使用它们并且我遇到了一些困难......

前四个是,我将有一个指定的字符后跟任意数量的数字,匹配它。

  • 我最好的"G[0-9]|G[0-9][0-9]|G[0-9][0-9][0-9]"G#G##G###
  • 相匹配

但是我希望在它之后用任意数量的数字做G。

接下来的三个是,我将有一个角色(X,Y,Z或P),如果后面没有字母或符号,我想匹配它

  • "[X|Y|Z|P][0-9]"

接下来的几个更难,匹配"#11.11=11.11",其中1是数字,英镑符号,句号和等号之间可以有任意数量的数字。并且期间不一定是"#11=11"" #1.1=11""#11=1.1"

  • 我不知道...... "#[0-9][ |.] ..."

" ' "之后和换行符之间的任何内容

  • '[A-Za-z0-9]\n"但我知道这只给了我一个角色......

我认为简单的是两个()[]

之间的任何内容
  • "(*) | [*]"

10 个答案:

答案 0 :(得分:1)

1> G [0-9] {1,3}

2 - ;不,这是错的。 正确的是[XYZ] [0-9] (你不使用OR运算符(|),而只是在方括号内并排编写字符)

答案 1 :(得分:1)

对于G后面有任意位数

\b([Gg]\d+)\b

这匹配一个wordboundary(\ b)后跟一个较低或较高的G [Gg],后跟一个或多个(+)数字(\ d),后跟一个wordboundary(\ b)

  

接下来的三个,我将有一个角色(X,Y,Z或P),我想要   如果背后没有字母或符号,则匹配它

这有点难度

\b[XYZP]([\W]|_)

这匹配一个XYZ或P后跟一个非单词字符\ W,(单词字符通常是az,0-9和下划线),所以在说我们不想要单词字符后,我们加入_是被允许的。

答案 2 :(得分:1)

  

我认为容易的是两个()或[]

之间的任何东西
"(*) | [*]"?

@"\([^(]*\)"@"\[[^\[]*\]"

这意味着:一个开放式括号 - 然后是任意数量的不是开放式括号的字符 - 以及一个紧密的括号。

需要斜杠来指示正则表达式引擎应该按字面意思处理括号。

@ - 逐字字符串 - 反过来告诉C#,这些斜杠应该按字面意思而不是C#转义字符。

  

" ' "之后和换行符之间的任何内容

同样:@"'[^']*\n"

答案 3 :(得分:1)

对于第一个,您可以使用此正则表达式:

^G\d+

答案 4 :(得分:1)

你应该真正了解如何使用正则表达式。话虽如此:

  

我将有一个指定的字符后跟任意数量的数字,匹配

G\d+
  

我会有一个角色(X,Y,Z或P),如果有,我想匹配它   背后没有字母或符号

(?<!\w)[XYZP][0-9]
  

接下来的几个更难,使“#11.11 = 11.11”蓝色

咦?

  

在“'”之后和换行符之间的任何内容

'(.+?)\n
  

我认为容易的是两个()或[]

之间的任何东西
\(.+?\)|\[.+?\]

答案 5 :(得分:1)

快速又脏,但使用正则表达式进行测试

1)G [0-9] {1-3} - “{1-3}”指定最后一个符号出现一到三次。

2)((。* |)) - 你在'('和')'之前加上'\'作为转义字符

3)[0-9] 1 *(。|)1 * = 1 *(。|)1 - 这与你的三个例子匹配

4)\'。* \ n - 我认为这应该有用......'\ n'代表一个新的字符串对吗?

5)((| [)。*()|]) - 这个再次具有转义字符

再次......快速而肮脏。 Regexpal.com是你的朋友

答案 6 :(得分:1)

  1. G\d+
  2. [XYZP](?=\d)
  3. #(\d+(\.\d+)?)=(\d+(\.\d+)?)
  4. '.*?\n
  5. \(.*?\)|\[.*?\]
  6. Regex explanation here.

答案 7 :(得分:1)

第一个:

G[0-9]+

在正则表达式中+表示至少1个或更多(重复之前的“字符”)。 你也可以使用*来表示没有或任意数量的重复。

第二种可能是这样的:

^(X|Y|Z|P)$

这实际上只有当它位于一行的开头且后面有 no 字符时才匹配。如果您希望它位于任何位置并且仅排除其后面的某些字符,请修改以下内容:

[XYZP][^0-9a-z]

这是X或Y​​或Z或P,后跟NOT 0-9和NOT a-z

请注意,我在括号中的第一个示例中使用OR字符|,但不在方括号中。

第三个:

#[0-9]+\.[0-9]+=[0-9]+\.[0-9]+

可能不是100%正确,我总是混淆何时逃避哪些角色。您可能需要转义#=

对于最后一个:

(\(.*\)|\[.*\])

答案 8 :(得分:1)

我使用perl作为正则表达式,但它应该与你正在寻找的相同。

对于第一个,G[0-9]+应该有效。方括号表示正则表达式只查找括号内的一个字符(字符为0到9),而后面的+表示它查找一个或多个匹配项。

第二个有点棘手,但我会使用\s[XYPZ]。方括号的功能与以前相同,只匹配X,Y,P或Z中的一个。\s匹配任何空白字符(制表符,空格,换行符等)。

对于第三个,我会尝试#[0-9]+\.?[0-9]+=[0-9]+\.?[0-9]+。如果我们从左到右,我们遇到\.?并且它是新的。 \.匹配一个文字句点(你必须用反斜杠转义它,因为只是一个句号本身意味着它可以匹配任何一个字符)。问号意味着期间可以存在或不存在(匹配零个或一个时期的实例)。

第四个:'.*\n。句点本身和星号的组合意味着它匹配零个或多个字符,字符是任何东西。我不太确定你是否需要逃避单引号。

对于第五个,(\(.*\)|\[.*\])应该做到这一点。你需要逃避括号内的[]()因为它们本身就意味着什么。此外,|表示或者,因此正则表达式可以匹配条形图左侧或右侧的任何内容。

答案 9 :(得分:0)

您可以通过不同方式指定重复。术语之后的星号“*”表示重复术语零,一次或多次。加号“+”表示重复该术语一次或多次。您还可以使用{n,m}指定数字范围。在你的情况下,表达式将是

G\d{1-3}

其中\d是一个数字。


使用此表达式,您可以匹配不在后缀

之前的位置
find(?!suffix)

我不确定你的意思是什么?

[XYZP](?![a-zA-Z specify your symbols here])

对于英镑数字

\#\d+(\.\d+)?=\d+(\.\d+)?

\#英镑符号
\d+至少一位数 (\.\d+)?可选地(?)一个句点至少有一个数字             最后一个等号继承了另一个数字


“'”和\ n之间的所有内容。在此使用此模式,它在前缀和后缀之间找到一个位置。

(?<=prefix)find(?=suffix)

(?<=').*(?=\n)

.*表示任何角色尽可能多次。或者你可以使用

(?<=').*?(?=\n)
如果摄取的.*太多,

\n表示任意角色的次数尽可能少。还要注意RegexOption.Multiline。根据其设置,您必须使用$而不是\n来测试行尾。


对于括号()或[],您可以再次使用相同的模式

(?<=prefix)find(?=suffix)

(?<=\().*?(?=\))|(?<=\[).*?(?=])

其中|是替代方案。