试图匹配字符串

你好,
你好,
我将字符串作为用户的输入,仅应
包含字符:l,m或r
我尝试了kodos的毛病,但它们仍然并不完美:
[^a-k,^n-q,^s-z,^0-9]
[L] [M] [R]
[lrm]?l?[lrm]?等,但是它们不完全满足我的需求.
例如:lrlrlrlrllm还可以,但是lrlrlrnl并不是它的" n".
问候,
SZ
字符串可能会或可能没有所有三个字符.

# 回答1


在7月18日,晚上8:33,arnimavidyar ...@gmail.com写道:
re.match(r'[lmr]+\ z',your_string)
用英语:一个或多个L,M或R的一个,然后是结束
细绳.
# 回答2


在7月18日,11:33*AM,Arnimavidyar ...@gmail.com写道:
使用正则表达式,[^lrm]匹配一个不是l,r的字符
或M. So:
导入
var =" lrlrlllnr"
如果re.search(r'[^lrm]',var):
打印"无效"
# 回答3


在7月18日,9:05 pm,oj 使用正则表达式,[^lrm]匹配一个不是l,r的字符
或M. So:
导入
var =" lrlrlllnr"
如果re.search(r'[^lrm]',var):
打印"无效"
如果VAR指的是空字符串,则会失败.
# 回答4


在7月18日,12:10*下午,John Machin 如果VAR指的是空字符串,则会失败.
不,如果VAR是一个空字符串,它将成功.一个空字符串
不包含非L,R或M的字符.
OP未指定空字符串是否有效.我的
解释是一个空字符串是有效的.
# 回答5


OJ写道:
如果VAR指的是空字符串,则会失败.
不,如果VAR是一个空字符串,它将成功.一个空字符串
不包含非L,R或M的字符.
OP未指定空字符串是否有效.我的
解释是一个空字符串是有效的.
为什么不只是使用 *而不是 +喜欢:
如果re.search(r'^[^lrm]*$',var):#注意:^外部[]是字符串的启动; $表示字符串的结尾
打印"无效"
当有l,r或m或一个空字符串以外的字符时,这只会 *打印无效.
# 回答6


安德鲁·弗里曼(Andrew Freeman)写道:
不,如果VAR是一个空字符串,它将成功.一个空字符串不包含非L,R或M的字符,OP未指定空字符串是否有效. mytrestation是一个空字符串是有效的.
为什么不只是使用 *而不是 +喜欢:
如果re.search(r'^[^lrm]*$',var):#注意:^外部[]是启动的
细绳; $表示字符串的结尾
打印"无效"
当有l以外的字符时,这只会 * *打印无效
R,M或一个空字符串.
抱歉,忘了开始和结束标记,我只是尝试了一下,
不起作用.
而是使用此:
如果re.search(r'[^lrm]*',var):
打印"无效"
# 回答7


在7月18日,7:51*下午,安德鲁·弗里曼(Andrew Freeman) 抱歉,忘了开始和结束标记,我只是尝试了一下,
不起作用.
而是使用此:
如果re.search(r'[^lrm] *',var):
* *打印"无效"
我正在使用kodos检查正则.我应该使用IDE
相反,再次感谢.
# 回答8


在7月18日上午7:51,安德鲁·弗里曼(Andrew Freeman) 抱歉,忘了开始和结束标记,我只是尝试了一下,
不起作用.
而是使用此:
如果re.search(r'[^lrm]*',var):
打印"无效"
这不起作用 - 宇宙中的每个字符串都包含0或更多
不是" L"," R"或" M"的字符.也就是说的
表达式X*可以匹配空字符串,可以在所有字符串中找到
字符串.
# 回答9


>
抱歉,忘了开始和结束标记,我只是尝试了一下,
不起作用.
而是使用此:
如果re.search(r'[^lrm]*',var):
* *打印"无效"
不,那是破碎的.
搜索任何数量的无效字符.甚至0,所以
总是匹配,无论您给它哪种字符串.
我的正则是首先工作的,您不必要地将其复杂化.
一个无效的角色的存在使字符串无效,所以为什么
不只是搜索一个吗?同样,也无需坚持
开始和结束标记 - 您不尝试匹配整个
字符串,只需找到无效的一部分即可.
但是,我认为斯科特·戴维·丹尼尔斯(Scott David Daniels)的套装解决方案是最重要的
提出的优雅方法.
# 回答10


OJ写道:
抱歉,忘了开始和结束标记,我只是尝试了一下,它不起作用.相反:如果re.search(r'[^lrm]*',var):打印"无效"
不,那是破碎的.
搜索任何数量的无效字符.甚至0,所以
总是匹配,无论您给它哪种字符串.
我的正则是首先工作的,您不必要地将其复杂化.
一个无效的角色的存在使字符串无效,所以为什么
不只是搜索一个吗?同样,也无需坚持
开始和结束标记 - 您不尝试匹配整个
字符串,只需找到无效的一部分即可.
但是,我认为斯科特·戴维·丹尼尔斯(Scott David Daniels)的套装解决方案是最重要的
提出的优雅方法.
-http://mail.python.org/mailman/listinfo/python-list
在重读问题后,我明白你的意思,他只想匹配我
R和m
让我修改它:
显示是否有效:
如果re.search(r'^[lrm]*$','lm'):
打印"有效"
为了显示是否无效,
如果re.search(r'^[^lrm]*$','0'):
打印" inalid"
示例会话:
........打印"有效"
........ 别的:
........打印"无效"
有效的
无效的
- -
安德鲁
# 回答11


在7月19日,下午12:04,安德鲁·弗里曼(Andrew Freeman) 几点:
(1)而不是搜索(r'^blahblah',...)使用匹配(r'blahblah',...)
(2)您需要正确选择最终主持人;您的模式是
最后允许新线:
<_sre.sre_match对象在0x00b9e528>
# 回答12


约翰·马奇(John Machin)写道:
几点:
(1)而不是搜索(r'^blahblah',...)使用匹配(r'blahblah',...)
(2)您需要选择您的最终组 或正确地;您的模式是
最后允许新线:
<_sre.sre_match对象在0x00b9e528>
-http://mail.python.org/mailman/listinfo/python-list
感谢您的指示,但是对第一个问题有疑问:
有效#正确!
Invaild#正确!
有效#正确!
Vaild#不正确,请解释
我相信其他_Match是您的建议;删除 ^
my_match只是我的原始功能的重命名版本
点2:
是的,我在第2点完全同意您的看法,让我尝试结合我的
知识并发挥令人满意的功能.
新线
....打印'有效'
.... 别的:
....打印"无效"
有效的
无效的
无效的
因此,总而言之,此功能是否令人满意?
def匹配(var):
如果re.search(r'^[lrm]*\ z',var):
打印"有效"
别的:
打印"无效"
- -
安德鲁
# 回答13


安德鲁·弗里曼(Andrew Freeman)写道:
我忘了更改搜索以匹配.这应该更好:
def匹配(var):
如果re..match(r'[lrm]*\ z',var):
返回true
别的:
返回false
我还在想您是否有这些物品的清单
经过验证,您可以使用以下方式:
['llmmrr','l']
- -
安德鲁
# 回答14


在7月20日上午5:00,安德鲁·弗里曼(Andrew Freeman) 我忘了更改搜索以匹配.这应该更好:
def匹配(var):
如果re..match(r'[lrm]*\ z',var):
返回true
别的:
返回false
有点言行...
如果布拉布:
返回true
别的:
返回false
可以完全取代一般性:
返回blahblah
您可以,但我建议您在面试中不要使用它:-)
(1)不要将'l'. -lower()用作名称;当人们的阅读速度减慢
需要发射他们的心理解析器,以将其与结果区分开
3-2
(2)阅读PEP 8
(3)blahblah == false ==不是blahblah
(4)您没有显示Map()的输出,即[无,
是的,没有,是的]
(5)或out.应用(...)是副作用的巴洛克式使用,非常
不必要.如果您觉得不可避免地会遵循地图方式,
在过滤器上阅读并减少功能.否则了解列表
综合和发电机.
['llmmrr','l']
考虑一下:
['llmmrr','l']
['llmmrr','l']
干杯,
约翰
# 回答15


约翰·马奇(John Machin)写道:
我忘了更改搜索以匹配.这应该更好:def match(var):如果re.match(r'[lrm]*\ z',var):返回true elly:return false
有点言行...
如果布拉布:
返回true
别的:
返回false
可以完全取代一般性:
返回blahblah
您可以,但我建议您在面试中不要使用它:-)
(1)不要将'l'. -lower()用作名称;当人们的阅读速度减慢
需要发射他们的心理解析器,以将其与结果区分开
3-2
(2)阅读PEP 8
(3)blahblah == false ==不是blahblah
(4)您没有显示Map()的输出,即[无,
是的,没有,是的]
(5)或out.应用(...)是副作用的巴洛克式使用,非常
不必要. 如果您觉得不可避免地会遵循地图方式,
在过滤器上阅读并减少功能.否则了解列表
综合和发电机.
['llmmrr','l']
考虑一下:
['llmmrr','l']
['llmmrr','l']
谢谢您的指示!
(1)根据我完全同意的字体,New几乎有一个
无法区分1和L,我正在使用Dejavu Sans Mono(Bitstream Vera
基于).我只是把它视为某些的通用变量名称
输入.我是Python和编程的新手,这更多是
一个爱好.
(2-3)这实际上是我第一次使用地图,也许我不应该
给出额外的例子,我实际上将其用作学习工具
我.我非常感谢邮件列表如此熟练
贡献者,例如你自己,但我认为给予没有什么伤害
工作代码,即使样式不完美.
(3)我个人认为地图(lambda i:match(i)== false或out.append(i),
l比地图(Lambda I:不匹配(I)或
out.append(i),l)即使"巴洛克式",您对过滤器的使用显然是
比任何一个要清晰得多.
(4)我高度怀疑该代码实际上是否在
交互式会话,有意将false/true输出截断,
这是一个明显但多余的输出(除非您依靠这个
通过将其附加到可能导致排序问题的变量上).
(5)非常感谢您,我已经阅读了过滤器并减少功能,
但还没有用足够的时间来识别它们的实用性.
我确实意识到列表理解将是有用的,但想
尝试地图()
我整理了一个通用匹配器,该匹配器返回一个真实数据列表
(如果输入是列表或元组)或布尔值:
def匹配(ex,var):
" EX是匹配的正则表达式,var the Itable或
字符串分别返回匹配项列表或布尔值."
ex = re.compile(ex).match
如果是isInstance(var,(列表,元组)):
返回过滤器(ex,var)
别的:
返回布尔(ex(var))
我相信这是相当干净和简洁的代码,这将有助于我
如果您觉得有一种更简洁,更通用的方式,可以学习
编写此功能.
- -
安德鲁
# 回答16


在7月20日,上午11:14,安德鲁·弗里曼(Andrew Freeman) 无论在任何地方使用它,有问题的代码都是胡说八道.
您对"截断"有什么意义?
您通过这样的重新启动而失去清晰度,而您一无所获.
您创建了一个函数,可以做两个截然不同的事情
取决于其中一个论点之一是仅有的两个论点之一
许多迭代物质,哪个具有相当通用的迭代(匹配什么?)
和误导(过滤器匹配的东西称为"匹配" ??)
姓名.丧失清晰度和由
读者必须找到该功能的代码,以便他们可以
通过它的难题意味着最简洁,最通用和
*推荐*编写此功能的方式不会在
全部.
写一个函数 H返回火柴.在不太可能的情况下
任何人都真正想将布尔斯放在列表中并对其进行排序,
然后他们可以将布尔()缠绕在上面.给它一个有意义的名字,例如
match_lrm.
您想检查单个变量是否是指有效的LRM字符串?
使用match_lrm(the_variable).友善.
您想从某些有效的所有事件中过滤掉
LRM字符串?使用过滤器(其名称指示其任务)或发电机
或列表理解...如果x在某些_ the in_iterable中的x
match_lrm(x)]确实应该很明显,即机会更少
而不是需要进行手册的过滤.
hth,
约翰
# 回答17


约翰·马奇(John Machin)写道:
无论在任何地方使用它,有问题的代码都是胡说八道.
您对"截断"有什么意义?
我正在附上"删除行(手动)的含义(不在
python))""要截断,我实际上正在使用ipython,但是
要像来自标准一样输入它的好习惯
解释器.我也可以忽略一些输出
我认为不必要.
# 回答18


在7月19日,3:04*上午,安德鲁·弗里曼(Andrew Freeman) 很好,这起作用,尽管匹配而不是搜索等等等等
已经提到了.我仍然认为寻找一个无效的
角色比尝试匹配整个字符串更优雅,但是
我想那只是个人喜好.
不,这是错误的.这仅与完全由
不是L,R或M的字符:
...打印"无效"
...
这不会打印"无效",因为有一个无效的
那里的角色,显然不是OP想要的.
# 回答19


OJ写道:
缺点是,如果您
这样做(如该线程所示).您进入的小速度
典型情况会因额外的调试/测试时间而迅速抵消(或
这件事,与C.l.py:ers争论或多或少人为的方式
解释原始帖子).
猜猜这取决于如何最好地帮助他人的个人偏好.
除非OP明确要求其他东西,否则我宁愿使用简单
以及具有合理执行行为的直接解决方案
巧妙的技巧或奇怪的解决方案;毕竟,这不是Japh比赛.
# 回答20


在7月21日,11:04*AM,Fredrik Lundh 我不同意,从这个线程中,大多数错误的解决方案都有
试图匹配整个字符串.
[^lrm] *是 *简单而直接的正则正则 - 它没有尝试
做任何聪明的技巧或任何奇怪的球.
也就是说,我仍然认为套装解决方案比
正则解决方案.

标签: python

添加新评论