我如何使python正则表达式像"(.*)"这样,给定"a(b)c(d)e"python匹配"b"而不是"b"c(d"?
我知道我可以使用"[^)]"而不是".",但我正在寻找一种更通用的解决方案,让我的正则表达式更清洁.有没有办法告诉python"嘿,尽快匹配"?
Notepad ++是否支持非贪婪的正则表达式?
例如文字:
abcxadc
Run Code Online (Sandbox Code Playgroud)
我想用模式获取零件:
a.+c
Run Code Online (Sandbox Code Playgroud)
现在我得到整个字符串而不是2个部分.我试过用'?' 运营商但没有成功.
对于初学者编写正则表达式来说,这似乎是一个巨大的混乱源,可能会导致隐藏的性能问题,并且看起来典型的用例将是非贪婪的.
这只是出于遗留原因(它是如何首次完成的,每个实现都复制了),还是有原因的?
问题:如果一个表单输入有名称,submit如何使用Javascript发送表单?
背景:我正在将用户重定向到另一个带有隐藏HTML表单的页面.我无法更改(隐藏)输入上的名称,因为另一个页面位于另一台服务器上,输入需要完全按原样.我的HTML表单如下所示:
<form id="redirectForm" method="post" action="http://www.example.com/">
<input name="search" type="hidden" value="search for this" />
<input name="submit" type="hidden" value="search now" />
</form>
Run Code Online (Sandbox Code Playgroud)
我今天使用以下javascript行自动发送表单:
document.getElementById('redirectForm').submit();
Run Code Online (Sandbox Code Playgroud)
但是,由于一个输入的名称是"submit"(它不能是其他内容,或者其他服务器不会处理请求),document.getElementById('redirectForm').submit因此它会引用输入,因为它会覆盖表单函数submit().
Firefox中的错误消息是:Error: document.getElementById("requestform").submit is not a function.Safari中的类似错误消息.
对于在分隔符(例如<和>)之间匹配文本的常见问题,有两种常见的模式:
*或+量词START [^END]* END,例如<[^>]*>,或*?或+?量词START .*? END,例如<.*?>.是否有一个特别的理由支持一个而不是另一个?
我总是写这样的正则表达式
<A HREF="([^"]*)" TARGET="_blank">([^<]*)</A>
Run Code Online (Sandbox Code Playgroud)
但我刚刚了解了这个懒惰的东西,我可以这样写
<A HREF="(.*?)" TARGET="_blank">(.*?)</A>
Run Code Online (Sandbox Code Playgroud)
使用第二种方法有什么不利之处吗?正则表达式肯定更紧凑(即使SO更好地解析它).
编辑:这里有两个最佳答案,指出表达式之间的两个重要差异.ysth的答案指向非贪婪/懒惰的弱点,其中超链接本身可能包含A标签的其他属性(绝对不好).Rob Kennedy在贪婪的例子中指出了一个弱点,因为锚文本不能包含其他标签(绝对不行,因为它也不会抓住所有的锚文本)......所以答案是,正则表达式就是他们的是,懒惰和非懒惰的解决方案似乎相同可能在语义上不等同.
编辑:第三个最佳答案是Alan M关于表达式的相对速度.暂时,我会将他标记为最佳答案,以便人们给他更多积分:)
我认为默认情况下我的正则表达式会展示我想要的贪婪行为,但它不在以下代码中:
Regex keywords = new Regex(@"in|int|into|internal|interface");
var targets = keywords.ToString().Split('|');
foreach (string t in targets)
{
Match match = keywords.Match(t);
Console.WriteLine("Matched {0,-9} with {1}", t, match.Value);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Matched in with in
Matched int with in
Matched into with in
Matched internal with in
Matched interface with in
Run Code Online (Sandbox Code Playgroud)
现在我意识到,如果我只是按照长度降序对关键字进行排序,我可以让它为这个小例子工作
所以我的问题是:为什么这是懒惰的,我该如何解决?
我有以下文字
tooooooooooooon
Run Code Online (Sandbox Code Playgroud)
根据我正在阅读的这本书,当?任何量词之后,它变得非贪婪.
我的正则表达式to*?n仍在回归tooooooooooooon.
它应该回归ton不应该吗?
知道为什么吗?
我有一个test.html带缓存清单的HTML5测试网页.该网页对同一服务器,对缓存清单中do_get_data.php的部分NETWORK:下列出的网页执行Ajax请求.
该请求由Firefox 10和iPhone iOS 5 Safari执行(这在服务PHP脚本中记录do_get_data.php).Firefox 10 success在10秒后调用回调函数,即返回服务器的数据.但是,我的iPhone iOS 5 Safari fail在启动请求后立即调用回调函数,并且不调用success回调函数.
对于iPhone的iOS 5 Safari浏览器中,textStatus是error和JSON.stringify(jqXHR)是{"readyState":0,"responseText":"","status":0,"statusText":"error"}.
请求使用以下代码执行test.html:
<script type="text/javascript">
function test_ok(data) {
alert('Test OK, data: ' + JSON.stringify(data));
}
function testFail(jqXHR, textStatus) {
alert(textStatus + ' | ' + JSON.stringify(jqXHR));
}
function get_data(testurl) {
var senddata, request;
alert('Request for ' + testurl + ' started.');
window.testid = new Date().getTime(); …Run Code Online (Sandbox Code Playgroud) regex ×8
regex-greedy ×8
greedy ×2
javascript ×2
non-greedy ×2
ajax ×1
alternation ×1
form-submit ×1
html ×1
html5 ×1
jquery ×1
notepad++ ×1
python ×1