在下面的代码片段中,匹配结果中应忽略非捕获组"(?:aaa)",因此结果应该"_bbb"只是.
但是,我得到"aaa_bbb"了匹配的结果; 只有当我指定组(2)时才会显示"_bbb".
>>> import re
>>> s = "aaa_bbb"
>>> print(re.match(r"(?:aaa)(_bbb)", s).group())
aaa_bbb
Run Code Online (Sandbox Code Playgroud) 对于我的一个类,我必须描述以下正则表达式:
\b4[0-9]{12}(?:[0-9]{3})\b
Run Code Online (Sandbox Code Playgroud)
我知道它选择一个数字:从4开始,后跟12位数字(每个在0-9之间),然后是另外3位数字.
我不明白的是带分号的问号(?:....).我试过在线查找这意味着什么,但我发现的链接有些令人困惑; 我希望有人可以快速了解问号在这个例子中的作用.
我的输入数字是一个int.但输入数字必须在-2055到2055的范围内,我想通过使用正则表达式来检查.
那么无论如何要写一个正则表达式来检查一个数字是否在(-2055,2055)中?
if语句用于检查数字是否在范围内更容易.但是我正在写一个解释器,所以我应该使用正则表达式来检查输入数字
我正在探索在Regex中捕获组,我对它缺乏文档感到困惑.对于前者,任何人都可以告诉我两个正则表达式之间的区别:
/(?:madhur)?/
Run Code Online (Sandbox Code Playgroud)
和
/(madhur)?/
Run Code Online (Sandbox Code Playgroud)
按照我的意见,?在第二个建议madhur在字符串中匹配零或一次.
第一个与第二个有什么不同?
我有以下输入,
OK SYS 10 LEN 20 12 43
1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt,1234 /data/c13af4/f.txt
.
Run Code Online (Sandbox Code Playgroud)
我想提取除包含" OK SYS 10 LEN 20"的行和包含单个"."(点)的最后一行之外的所有输入.也就是说,我想提取以下内容
1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt.1234 /data/c13af4/f.txt
Run Code Online (Sandbox Code Playgroud)
我试过以下,
for item in output:
matchObj = re.search("^(?!OK) | ^(?!\\.)", item)
if matchObj:
print "got item " + item
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为它不会产生任何输出.
我可以使用.htaccess禁用对文件的访问,但我不知道如何禁止查看多个文件(直接,不是来自包含)
它们是.php所以我无法禁用文件类型(就像在线的唯一教程说的那样..)
<FILES ... ?
</FILES>
Run Code Online (Sandbox Code Playgroud)
或者其他东西..例如"home.php,file.php,test.php"如何禁止访问带有该标签的所有三个文件?或类似的,请帮忙!
源字符串是:
# Python 3.4.3
s = r'abc123d, hello 3.1415926, this is my book'
Run Code Online (Sandbox Code Playgroud)
这是我的模式:
pattern = r'-?[0-9]+(\\.[0-9]*)?|-?\\.[0-9]+'
Run Code Online (Sandbox Code Playgroud)
但是,re.search可以给我正确的结果:
m = re.search(pattern, s)
print(m) # output: <_sre.SRE_Match object; span=(3, 6), match='123'>
Run Code Online (Sandbox Code Playgroud)
re.findall 只是转出一个空列表:
L = re.findall(pattern, s)
print(L) # output: ['', '', '']
Run Code Online (Sandbox Code Playgroud)
为什么不能re.findall给我预期的清单:
['123', '3.1415926']
Run Code Online (Sandbox Code Playgroud) 在Python 2.6中.似乎字符串结束的标志$和\Z不符合组表达式兼容.举个例子
import re
re.findall("\w+[\s$]", "green pears")
Run Code Online (Sandbox Code Playgroud)
回报
['green ']
Run Code Online (Sandbox Code Playgroud)
(所以$实际上不起作用).并使用
re.findall("\w+[\s\Z]", "green pears")
Run Code Online (Sandbox Code Playgroud)
导致错误:
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc in findall(pattern, string, flags)
175
176 Empty matches are included in the result."""
--> 177 return _compile(pattern, flags).findall(string)
178
179 if sys.hexversion >= 0x02020000:
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc in _compile(*key)
243 p = sre_compile.compile(pattern, flags)
244 except error, v:
--> 245 raise error, v # invalid expression
246 if len(_cache) >= _MAXCACHE:
247 _cache.clear()
error: internal: unsupported set operator
Run Code Online (Sandbox Code Playgroud)
为什么它会这样运作以及如何四处走动?
我最近一直在寻找一个正则表达式来做一些客户端日期检查,但我找不到一个能满足以下条件的表达式:
(这些限制超出了我的范围,并且是客户的要求,尽管我努力说服他们这不是最好的路线)
当前代码:
$('input').keyup(function()
{
var regex = /^(?:(0[1-9]|1[012])[\/.](0[1-9]|[12][0-9]|3[01])[\/.](18|19|20)[0-9]{2})$/;
$(this).toggleClass('invalid',!regex.test($(this).val()));
});
Run Code Online (Sandbox Code Playgroud)
更新:
我应该注意,这主要是为了看看这样的正则表达式是否可行(因为在这个问题上使用正则表达式不是我的选择).我知道验证日期的其他(和更好的)选项,但是如前所述 - 这是通过正则表达式查看是否可能.