擅长:python、mysql、java
<p>因为他的州名包含两个字:南卡罗来纳</p>
<p>如果你的第二个正则表达式是这样,应该会有帮助</p>
<pre><code> (@[\w\d\.]*\s[\w\d\.]*\s?[\w\d\.]\s?[\w\d\.]*?\s+?\w+(?:\s\w+)?)
</code></pre>
<p>我补充道</p>
<pre><code>(?:\s\w+)?
</code></pre>
<p>这是一个可选的非捕获组,与后跟一个或多个字母数字下划线字符的空格相匹配</p>
<p><a href="http://regexr.com?31fv5" rel="nofollow">http://regexr.com?31fv5</a>显示它正确地匹配带有NOs和破折号的输入</p>
<p><strong>编辑:</strong>
如果您希望一个主正则表达式能够正确地捕获和拆分所有内容,那么在删除Nos和破折号之后,可以使用</p>
<pre><code>((@[\w]+?\s)((?:(?:[\w]+?)\s){1,2})((?:[\w]+?\s){2}))
</code></pre>
<p>你可以在这里玩:<a href="http://regexr.com?31fvk" rel="nofollow">http://regexr.com?31fvk</a></p>
<p>完全匹配的价格是1美元,Twitter句柄是2美元,状态是3美元,名字是4美元</p>
<p>每个捕获组的工作方式如下:</p>
<pre><code>(@[\w]+?\s)
</code></pre>
<p>它匹配一个@符号,后跟至少一个但尽可能少的字符,直到一个空格。你知道吗</p>
<pre><code>((?:(?:[\w]+?)\s){1,2})
</code></pre>
<p>这将匹配并捕获一个或两个单词,这应该是状态。这只适用于下一篇文章,其中必须有两个词</p>
<pre><code>((?:[\w]+?\s){2})
</code></pre>
<p>匹配并捕获两个单词,定义为尽可能少的字符后跟空格</p>