如何在python中使用正则表达式模式检查字符串的一部分

问题描述

我想检查字符串是否包含与给定正则表达式模式匹配的某些部分。 我的正则表达式是检查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.Xre.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则表示找不到

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...