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使用新浪微博API发送微博的例子
Apr 10 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
Django 外键的使用方法详解
Jul 19 Python
Python中的list与tuple集合区别解析
Oct 12 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
PyTorch中反卷积的用法详解
Dec 30 Python
在Python中通过threshold创建mask方式
Feb 19 Python
关于Python Tkinter Button控件command传参问题的解决方式
Mar 04 Python
基于python实现复制文件并重命名
Sep 16 Python
pytorch中的numel函数用法说明
May 13 Python
Python实现简单的俄罗斯方块游戏
Sep 25 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
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
jquery.post用法示例代码
2014/01/03 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
python中split方法用法分析
2015/04/17 Python
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
python 生成器协程运算实例
2017/09/04 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
有限责任公司股东合作协议书范本
2014/10/30 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
利用Python实现模拟登录知乎
2022/05/25 Python