问题描述
我想检查字符串是否包含与给定正则表达式模式匹配的某些部分。 我的正则表达式是检查IP地址的存在,就像这样
regex = '''^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$'''
我想检查这样的字符串是否包含IP地址
url_string = "http://110.234.52.124/paypal.ca/index.html"
由于它具有IP地址,我想检测到该地址,怎么办?
解决方法
正则表达式至少存在两个问题:
- 它包含用作格式化空格的空格,需要
re.X
或re.VERBOSE
选项才能起作用 - 这里有
^
和$
锚点,需要完全字符串匹配。您可能想使用单词边界,而不是\b
- 如果添加单词边界,则常规字符串文字将需要加倍的反斜杠,但是如果添加
r
前缀并将其设为原始字符串文字,则可以仅使用\b
- 如果还有其他不是IP且需要过滤的点分隔数字字符串,则您需要在开头
(?<!\d)(?<!\d\.)
而不是^
和结尾(?!\.?\d)
而不是{ {1}}。
您可以使用
$
请参见Python demo
但是,您可以将八位位组模式定义为变量,并动态构建模式,从而无需使用import re
regex = r'''\b(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\b'''
url_string = "http://110.234.52.124/paypal.ca/index.html"
print( bool(re.search(regex,url_string,re.X)) )
# => True
和该长模式:
re.X
请参见Python demo。请注意import re
o = r'(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)'
regex = fr'\b{o}(?:\.{o}){{3}}\b'
# OR regex = fr'(?<!\d)(?<!\d\.){o}(?:\.{o}){{3}}(?!\.?\d)'
url_string = "http://110.234.52.124/paypal.ca/index.html"
print( bool(re.search(regex,re.X)) )
# => True
周围的双括号(在f字符串中,文字括号用双括号定义)。
SeekBar
您只需要删除^和$并调用此函数 如果结果为None则表示找不到