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 文件和路径操作函数小结
Nov 23 Python
numpy.transpose对三维数组的转置方法
Apr 17 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
python修改FTP服务器上的文件名
Sep 11 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
python对输出的奇数偶数排序实例代码
Dec 04 Python
python中@contextmanager实例用法
Feb 07 Python
Python语言内置数据类型
Feb 24 Python
方法汇总:Python 安装第三方库常用
Apr 26 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
文件上传类
2006/10/09 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP内置加密函数详解
2016/11/20 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Python异常的检测和处理方法
2018/10/26 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
日本无添加化妆品:HABA
2016/08/18 全球购物
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
计算机专业优秀大学生自我总结
2014/01/21 职场文书
房屋委托书范本
2014/04/04 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
护士年终考核评语
2014/12/31 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
综合素质自我评价评语
2015/03/06 职场文书
工厂门卫岗位职责
2015/04/13 职场文书