我正在尝试在我的语法荧光笔中使用一些正则表达式字符串,如果我第一次使用它们并且我遇到了一些困难......
前四个是,我将有一个指定的字符后跟任意数量的数字,匹配它。
"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"
但我知道这只给了我一个角色...... 我认为简单的是两个()
或[]
"(*) | [*]"
?答案 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)
G\d+
[XYZP](?=\d)
#(\d+(\.\d+)?)=(\d+(\.\d+)?)
'.*?\n
\(.*?\)|\[.*?\]
答案 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)
(?<=\().*?(?=\))|(?<=\[).*?(?=])
其中|
是替代方案。