Python判断字符串是否为合法标示符操作


Posted in Python onSeptember 03, 2020

这学期在学习编译原理,最近的上机作业就是做一个简单的词法分析器,在做的过程中,突然有个需求就是判断一个字符串是否为合法的标示符,因为我是用python语言做的,做的是Python的词法分析器,于是下面分享以下怎样判断一个字符串是合法的标示符。

首先,我们来熟悉以下python标示符的定义是什么?

定义:以字母或下划线开始的,由字母,数字或下划线组成,但是不能是python的保留字。

又有疑问了,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个
# 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个

好了,下面开始判断

# 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: # 判断是否为字母或下划线开头
  for i in s:
   if i == '_' or i in string.letters or i in string.digits: # 判断是否由字母数字或下划线组成
    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: # 判断是否为字母或下划线开头
  for i in s:
   if i == '_' or i in string.ascii_letters or i in string.digits: # 判断是否由字母数字或下划线组成
    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()

通过键盘输入判断,是标示符,则返回True,否则返回False

补充知识:python:标识符必须以字母或下划线开头,后面跟字母,下划线或者数字

标识符合法性检查,首先要以字母或者下划线开始,后面要跟字母,下划线或者或数字.这个小例子只检查长度大于等于 2 的标识符

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')

运行结果 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

运行结果 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判断字符串是否为合法标示符操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python笔记(2)
Oct 24 Python
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
python 调用c语言函数的方法
Sep 29 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
Python使用progressbar模块实现的显示进度条功能
May 31 Python
详解用python自制微信机器人,定时发送天气预报
Mar 25 Python
python修改FTP服务器上的文件名
Sep 11 Python
解析Python3中的Import
Oct 13 Python
Python调用.NET库的方法步骤
Dec 27 Python
Django一小时写出账号密码管理系统
Apr 29 Python
图解Python中深浅copy(通俗易懂)
Sep 03 #Python
python简单实现9宫格图片实例
Sep 03 #Python
django使用graphql的实例
Sep 02 #Python
django数据模型中null和blank的区别说明
Sep 02 #Python
sqlalchemy实现时间列自动更新教程
Sep 02 #Python
解决Python 函数声明先后顺序出现的问题
Sep 02 #Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 #Python
You might like
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
php查询whois信息的方法
2015/06/08 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
jQuery validata插件实现方法
2017/06/25 jQuery
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
朴素贝叶斯算法的python实现方法
2014/11/18 Python
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
Python面向对象进阶学习
2019/05/21 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
3种python调用其他脚本的方法
2020/01/06 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
python中的插入排序的简单用法
2021/01/19 Python
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
某公司部分笔试题
2013/11/05 面试题
会计系毕业个人自荐信格式
2013/09/23 职场文书
科室工作个人总结的自我评价
2013/10/29 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
解析Java异步之call future
2021/06/14 Java/Android