0

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

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

  • 我最好的方法是"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" 但我知道这只会给我一个角色......

我认为最容易的是介于两者之间()[]

  • "(*) | [*]"?
4

10 回答 10

1

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

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

于 2012-08-21T18:46:27.827 回答
1

对于 G 后面有任意位数

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

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

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

这个有点难

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

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

于 2012-08-21T18:48:53.080 回答
1

我认为最简单的是两个 () 或 [] 之间的任何东西

"(*) | [*]"?

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

这意味着:一个左括号 - 然后是任意数量的不是左括号的字符 - 和一个右括号。

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

@- 逐字字符串 - 反过来通知 C# 这些斜杠应该按字面意思理解,而不是作为 C# 转义字符。

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

相似地:@"'[^']*\n"

于 2012-08-21T18:49:05.250 回答
1

对于第一个,您可以使用此 Regex :

^G\d+
于 2012-08-21T18:49:34.480 回答
1

你真的应该看看如何使用正则表达式。话说回来:

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

G\d+

我将有一个字符(X、Y、Z 或 P),如果它后面没有字母或符号,我想匹配它

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

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

嗯?

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

'(.+?)\n

我认为最简单的是两个 () 或 [] 之间的任何东西

\(.+?\)|\[.+?\]
于 2012-08-21T18:53:34.457 回答
1

快速而肮脏,但使用正则表达式测试

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

2) ((.*|)) - 你在 '(' 和 ')' 之前放置一个 '\' 作为转义字符

3) [0-9]1*(.|)1*=1*(.|)1 - 这符合你的三个例子

4) \'.*\n - 我认为这应该可以工作......'\n' 代表一个新行字符,对吗?

5) ((|[).*()|]) - 这个又有转义字符

再次......又快又脏。Regexpal.com 是您的朋友

于 2012-08-21T18:54:45.540 回答
1
  1. G\d+
  2. [XYZP](?=\d)
  3. #(\d+(\.\d+)?)=(\d+(\.\d+)?)
  4. '.*?\n
  5. \(.*?\)|\[.*?\]

正则表达式解释在这里。

于 2012-08-21T18:54:59.703 回答
1

第一个:

G[0-9]+

在正则表达式+中表示至少 1 个或多个(重复前面的“字符”)。您也可以使用*无或任意次数的重复。

第二个可能是这样的:

^(X|Y|Z|P)$

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

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

这是 X 或 Y 或 Z 或 P 后跟 NOT 0-9 和 NOT az

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

对于第三个:

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

可能不是 100% 正确,我总是混淆何时转义哪些字符。你可能需要逃跑#并且=.

对于最后一个:

(\(.*\)|\[.*\])
于 2012-08-21T18:55:15.973 回答
1

我将 perl 用于正则表达式,但希望它应该与您正在寻找的相同。

对于第一个,G[0-9]+应该工作。方括号表示正则表达式仅查找括号内的一个字符(字符为 0 到 9),而+在它之后的右边表示它查找一个或多个匹配项。

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

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

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

对于第五个,(\(.*\)|\[.*\])应该做的伎俩。您需要转义[]()括号内的内容,因为它们本身就意味着某些东西。此外,|表示或,因此正则表达式可以匹配栏左侧或右侧的任何内容。

于 2012-08-21T19:04:46.143 回答
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)

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

|替代方案在哪里。

于 2012-08-21T19:09:06.490 回答