我是新来的正则表达式。我试图构造一个正则表达式,前三个字符必须是字母,然后字符串的其余部分可以是任何字符。如果前三个字符后的字符串的部分包含&那么这部分应该开始和结束”。if条件的正则表达式
我能够构建^ [AZ] {3},但停留在条件语句。
灿这可以在一个单一的表达做
我是新来的正则表达式。我试图构造一个正则表达式,前三个字符必须是字母,然后字符串的其余部分可以是任何字符。如果前三个字符后的字符串的部分包含&那么这部分应该开始和结束”。if条件的正则表达式
我能够构建^ [AZ] {3},但停留在条件语句。
灿这可以在一个单一的表达做
在大多数正则表达式的口味,你可以使用简单的向前看符号,以确保一些文本存在或不存在的地方到当前位置的右侧,并使用交替操作|
有可能检查替代品。
所以,我们基本上有两种选择:在前三个字母之后的字符串中有一个&
,或者不是。因此,我们可以用
^[A-Za-z]{3}(?:(?=.*&)".*"|(?!.*&).*)$
详细:
^
- 字符串的开始[A-Za-z]{3}
- 3个字母(?:(?=.*&)".*"|(?!.*&).*)
- 无论是两替代品:
(?=.*&)".*"
- 如果有一个&
某处的字符串((?=.*&)
)匹配"
,那么任何0+字符,然后"
|
- 或(?!.*&).*
- 如果没有&
((?!.*&)
)在字符串中,只需匹配任何0+字符即可...$
- 字符串结尾。在PCRE,或者.NET,或者一些其他的正则表达式的口味,你可以访问条件结构。这里是一个PCRE demo:
^[A-Za-z]{3}(?(?=.*&)".*"|.*)$
^^^^^^^^^^^^^^^^^
的(?(?=.*&)".*"|.*)
手段:
(?(?=.*&)
- 如果有&
之后的任何字符0+ ...".*"
- 比赛"anything here"
般串|
- 或者如果不存在&
.*
- 匹配当前位置的任何0+个字符(即之后的前3个字母)。是啊,这是可能的,这是不是一个真正的如果,但是你的情况,你可以做一个“或”用正则表达式捕获组你的正则表达式看起来类似的东西:?
\d{3}(\".*\"|[^&]*)
PS here是一个很好的网站来测试和学习这些东西: https://regex101.com/
正则表达式不一定支持条件与'if'一样,为了在一般情况下实现这个条件,你必须声明你的条件是可选的。 (但见Wiktor的的评论,这取决于你的正则表达式引擎有可能是可用的条件语句。)
对于一个相对基本的解决方案,你可以尝试这样的事:
^[a-z]{3}([^&]*|\..*\.)$
它说“后四个字母,应该有是任何长度的字符串,没有符号(&)或字符串开始,以一个句号结束
请参阅https://msdn.microsoft.com /en-us/library/36xybswe(v=vs.110).aspx#Conditional_Expr –
Wiktor:有趣的扩展。值得一看,如果你的正则表达式引擎支持它。 – Jan
三个字母之后应该有一个任意长度的字符串,但即使在三个字母后没有字符串,也可以工作。请你帮忙吗? – user2359634
条件语句可以在使用()|。和群体,但它可能会很复杂
^[a-z]{3}([^&]*$|".*"$)
你可能会考虑使用普通的旧的字符串操作完成这个任务,它可能会是简单
^[a-z] {3}([^&] + $ |“。*”$)为我工作。谢谢! – user2359634
本身将取决于你使用正则表达式解析器的表达。如果你使用Python,shell,vim,boost等,相同的符号可能有不同的含义。
我会尝试以下方法:
$ echo 'abc"&def"' | grep -E "^[a-zA-Z]{3}(\".*\&.*\"|[^&]*)"
abc"&def"
你能给我们一个使用真实单词的例子,结果是什么? – Justplayit94
你可以用交替来做到这一点。例如'^ [az] {3}([^&] * |“。*”)$' – jsheeran
例如abcENT和abc“E&T”是有效的字符串,但不是abcE&T – user2359634