擅长:python、mysql、java
<p>你的第一个regex真的意味着:</p>
<pre><code>[\^a]b # match a literal '^' or 'a', followed by a 'b'
</code></pre>
<p>你的第二个正则表达式:</p>
<pre><code>^b # match start of line followed by a 'b'
</code></pre>
<p>对于第一个regex,您真正想要的是:</p>
<pre><code>^b|ab # match start of line followed by a 'b',
# OR
# an 'a' followed by a 'b'
</code></pre>
<p>另请注意<code>re.match()</code>自动尝试从开头查找匹配项,如果要查找出现在字符串中间的字符串,则需要使用<code>re.search()</code>。</p>
<blockquote>
<p>Say I want to search for a line start or 'a', or 'x', or '2' or '5' followed by a 'b'. Can't I do <code>[^ax25]b</code> instead of <code>^b|ab|xb|2b|5b</code>?</p>
</blockquote>
<p>在这种情况下,我会:</p>
<pre><code>(^|[ax25])b
</code></pre>
<p>character类只能包含<em>个字符</em>。插入符号(<code>^</code>)在字符类中作为匹配字符串开头的零宽度断言的特殊含义发生了变化:如果第一个字符是整个字符类的负数,或者如果转义或放在其他位置,则表示文字插入符号(<code>^</code>)。</p>