我想测试某些字符是否在一行文本中。条件很简单,但要测试的字符很多。
目前我正在使用\
进行查看,但感觉很笨拙。什么方法可以使线看起来更好?
text = "Tel+971-2526-821 Fax:+971-2526-821"
if "971" in text or \
"(84)" in text or \
"+66" in text or \
"(452)" in text or \
"19 " in text:
print "foreign"
答案 0 :(得分:3)
为什么不从字符串中提取电话号码并进行测试
text = "Tel:+971-2526-821 Fax:+971-2526-821"
tel, fax = text.split()
tel_prefix, *_ = tel.split(':')[-1].split('-')
fax_prefix, *_ = fax.split(':')[-1].split('-')
if tel_prefix in ("971", "(84)"):
print("Foreigner")
python 2.x
tel_prefix = tel.split(':')[-1].split('-')[0]
fax_prefix = fax.split(':')[-1].split('-')[0]
答案 1 :(得分:2)
@Patrick Haugh在评论中启发。我们可以这样做:
<form class="form-horizontal" method="post" action="<?php echo base_url().'people/save'?>" onSubmit="return showImage();">
<div class="box-body">
<div class="form-group">
<label for="address" class="col-sm-2 control-label">Address</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="address" name="address" readonly />
</div>
</div>
<div class="form-group">
<label for="Telp" class="col-sm-2 control-label">Telp</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="Telp" name="Telp" readonly />
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default pull-left" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
..
答案 2 :(得分:1)
您可以使用0
内置函数来检查文本中是否存在任何一个令牌。如果您想检查字符串中是否存在所有令牌,可以使用any
函数替换下面的any
。干杯!
all
输出:
text = 'Hello your number is 19 '
tokens = ('971', '(84)', '+66', '(452)', '19 ')
if any(token in text for token in tokens):
print('Foriegn')
答案 3 :(得分:1)
现有的评论提到你不能像你想要的那样拥有多个or
语句,但是使用生成器/理解和any()
函数你可以提出一个可服务的选项,例如
我建议使用正则表达式作为解决问题的更通用和有效的方法。您可以动态生成模式,或者出于此问题的目的,以下代码段将起作用(不要忘记转义括号):
import re
text = 'Tel:+971-2526-821 Fax:+971-2526-821'
pattern = u'(971|\(84\)|66|\(452\)|19)'
prog = re.compile(pattern)
if prog.search(text):
print 'foreign'
如果要为多个可能的子字符串搜索多行文本或大型文本,这种方法将更快,更可重用。您只需编译一次prog
,然后就可以随意使用它。
就动态生成模式而言,一个天真的实现可能会做这样的事情:
match_list = ['971', '(84)', '66', '(452)', '19']
pattern = '|'.join(map(lambda s: s.replace('(', '\(').replace(')', '\)'), match_list)).join(['(', ')'])
然后可以根据需要更新和修改变量match_list
。运行replace()
两次传球效率不高,而且@Andrew Clark有一个很好的技巧来修复here,但我不希望这个答案太长而且麻烦。
答案 4 :(得分:1)
您可以构建一个lambda
函数来检查value
中是否有text
,然后map
此函数是values
的所有text = "Tel:+971-2526-821 Fax:+971-2526-821"
print any(map((lambda x: x in text), ["971", "(84)", "+66", "(452)", "19 "]))
:
True
结果为values
,这意味着text
中至少有一个位于{{1}}。