src='''\
int main( void )
{
return 0;
}
'''
import re
for key, span in ((m.group(1), m.span(1)) for m in re.finditer(r'\b(int|main|void|return)\b', src)):
print key, span
印刷品:
^{pr2}$
但我认为使用一组关键字来验证找到的单词比将所有单词都放在一个模式中要好。在
考虑:
keywords={'int', 'main', 'void', 'return'}
for key, span in ((m.group(1), m.span(1)) for m in re.finditer(r'\b(\w+)\b', src)
if m.group(1) in keywords):
print key, span
首先,Python不使用正斜杠(
/
)来表示正则表达式模式的开始和结束。按照惯例,使用原始字符串。原始字符串是避免字符串中特殊字符编码的一种方法。最常见的例子是换行符('\n'
)。通常这两个字符将被转换成一个特殊的换行符,但是如果我们想要一个literal正斜杠后跟一个literaln,我们使用一个原始字符串,比如r'\n'
。或者,我们可以转义反斜杠字符并将其写为'\\n'
,但是对于具有更多特殊字符的较长字符串,我们确实希望避免在任何地方都使用反斜杠。正如您可能注意到的,原始字符串是编写正则表达式的一种非常方便的方法。在您忘记将模式设置为原始字符串,因此\b被解释为特殊的转义字符(在本例中,无论出于何种原因,它都会转换为ASCII字符#8),而不是字边界。通过在字符串前面加上
r
可以使任何字符串文本成为原始字符串:下面是一个例子:
印刷品:
^{pr2}$但我认为使用一组关键字来验证找到的单词比将所有单词都放在一个模式中要好。在
考虑:
输出相同,但更容易添加单词。在
1。Python不在
^{pr2}$/
中包含模式:2。您确实希望将此字符串设为原始字符串,否则
\b
将被解释为控制字符:3。您需要将您的或组括在括号中:
然后:
在您最初的模式中,整个事件被分为三个独立的或部分:
},因此自然只能找到{}。在
/\bint
、void
、和{相关问题 更多 >
编程相关推荐