Python判斷字符串是否為合法標(biāo)示符操作
這學(xué)期在學(xué)習(xí)編譯原理,最近的上機(jī)作業(yè)就是做一個(gè)簡(jiǎn)單的詞法分析器,在做的過(guò)程中,突然有個(gè)需求就是判斷一個(gè)字符串是否為合法的標(biāo)示符,因?yàn)槲沂怯胮ython語(yǔ)言做的,做的是Python的詞法分析器,于是下面分享以下怎樣判斷一個(gè)字符串是合法的標(biāo)示符。
首先,我們來(lái)熟悉以下python標(biāo)示符的定義是什么?
定義:以字母或下劃線開(kāi)始的,由字母,數(shù)字或下劃線組成,但是不能是python的保留字。
又有疑問(wèn)了,python有哪些保留字,分別是什么?
# python2.x import keyword print keyword.kwlis # python3.x import keyword print(keyword.kwlist) # python2.x輸出: ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] # 共31個(gè) # python3.x輸出: ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] # 共33個(gè)
好了,下面開(kāi)始判斷
# python2.7
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import keyword
import string
def is_signal(s):
kw = keyword.kwlist
if s in kw:
return 0
elif s[0] == '_' or s[0] in string.letters: # 判斷是否為字母或下劃線開(kāi)頭
for i in s:
if i == '_' or i in string.letters or i in string.digits: # 判斷是否由字母數(shù)字或下劃線組成
pass
else:
return 0
return 1
else:
return 0
def main():
s = raw_input()
if is_signal(s) == 1:
print "True"
else:
print "False"
if __name__ == '__main__':
main()
# python3.4
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import keyword
import string
def is_signal(s):
kw = keyword.kwlist
if s in kw:
return 0
elif s[0] == '_' or s[0] in string.ascii_letters: # 判斷是否為字母或下劃線開(kāi)頭
for i in s:
if i == '_' or i in string.ascii_letters or i in string.digits: # 判斷是否由字母數(shù)字或下劃線組成
pass
else:
return 0
return 1
else:
return 0
def main():
s = input()
if is_signal(s) == 1:
print("True")
else:
print("False")
if __name__ == '__main__':
main()
通過(guò)鍵盤(pán)輸入判斷,是標(biāo)示符,則返回True,否則返回False
補(bǔ)充知識(shí):python:標(biāo)識(shí)符必須以字母或下劃線開(kāi)頭,后面跟字母,下劃線或者數(shù)字
標(biāo)識(shí)符合法性檢查,首先要以字母或者下劃線開(kāi)始,后面要跟字母,下劃線或者或數(shù)字.這個(gè)小例子只檢查長(zhǎng)度大于等于 2 的標(biāo)識(shí)符
idcheck.py
#!/usr/bin/env python
'''
idcheck.py -- checks identifiers for validity
'''
import string # string utility module
# create alphabet and number sets
alphas = string.ascii_letters + '_'
nums = string.digits
# salutation message and input prompt
print ('Welcome to the Identifier Checker v1.0')
print ('Testees must be at least 2 chars long.')
inp = input('Identifier to test ?')
if len(inp) >= 1:
if inp[0] not in alphas:
print ('invalid: first symbol must be alphabetic')
else:
for otherChar in inp[1:]:
if otherChar not in alphas + nums:
print ('invalid: remaining symbols must be alphanumeric')
break
else:
print ("okay as an identifier")
else:
print ('invalid: length must be >= 1')
運(yùn)行結(jié)果 1:
Welcome to the Identifier Checker v1.0 Testees must be at least 2 chars long. Identifier to test -> 123_das invalid: first symbol must be alphabetic
運(yùn)行結(jié)果 2:
Welcome to the Identifier Checker v1.0 Testees must be at least 2 chars long. Identifier to test -> _123sdad okay as an identifier
以上這篇Python判斷字符串是否為合法標(biāo)示符操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
盤(pán)點(diǎn)提高 Python 代碼效率的方法
本人用 Python 快兩年了,平時(shí)只是用它來(lái)寫(xiě)點(diǎn)小小的分析腳本,以方便快捷為主,也沒(méi)怎么考慮代碼效率問(wèn)題。最近想給自己升升級(jí),提高一下代碼的檔次。于是找了一堆效率相關(guān)的文章,做了些實(shí)驗(yàn),總結(jié)一下。2014-07-07
Python實(shí)現(xiàn)GUI學(xué)生管理系統(tǒng)的示例代碼
這篇文章主要為大家介紹了如何留Python語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易的GUI學(xué)生管理系統(tǒng),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考下2022-06-06
python根據(jù)url地址下載小文件的實(shí)例
今天小編就為大家分享一篇python根據(jù)url地址下載小文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
git使用.gitignore設(shè)置不生效或不起作用問(wèn)題的解決方法
下面小編就為大家?guī)?lái)一篇git使用.gitignore設(shè)置不生效或不起作用問(wèn)題的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
基于Pytorch的神經(jīng)網(wǎng)絡(luò)之Regression的實(shí)現(xiàn)
本文主要介紹了基于Pytorch的神經(jīng)網(wǎng)絡(luò)之Regression的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
python小例子-縮進(jìn)式編碼+算術(shù)運(yùn)算符+定義與賦值
這篇文章主要給大家分享一些python學(xué)習(xí)小例子,內(nèi)容包括縮進(jìn)式編碼風(fēng)格、算術(shù)運(yùn)算符、定義與賦值,需要的小伙伴可以參考一下2022-04-04
基于python select.select模塊通信的實(shí)例講解
下面小編就為大家?guī)?lái)一篇基于python select.select模塊通信的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09

