python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python 字符串自动拼接

python中字符串自动拼接的示例代码

作者:atwdy

本文主要介绍了python中字符串自动拼接的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

python中的字符串自动拼接发生在编译成字节码的时期,只会对字符串字面量进行自动拼接。

1.背景

在用下面正则判断输入地址是否属于仅行政区划地址时:

import re

XZQH_PATTERN = r"^[^省市区县村路街乡0-9a-zA-Z]+省$|"
r"^(?!.*[一二三四五六七八九十]门市$)[^区县村路街乡]*[^超小鱼0-9a-zA-Z]市$|"
r"^[^县镇区村路街乡]*[^小景胜假务东西南北中社业发港住车游护园校舍活墅工0-9a-zA-Z一二三四五六七八九十]区$|"
r"县$"


def process_one(address: str):
    """
    判断单条地址是否仅包含行政区划
    :param address:
    :return: 是:True  否:False
    """
    if re.search("自治区", address):
        address = re.sub("自治区", "省", address)
    return re.search(XZQH_PATTERN, address)


if __name__ == '__main__':
    print(process_one("xx小区"))  # <re.Match object; span=(0, 0), match=''>

正则中前已经排除不能为,但是正则的匹配结果返回了空字符串,相当于命中了上面的正则返回了True,不符合匹配预期。

排查发现原因在于python的字符串自动拼接规则,因为字符串换行且未用()包裹,所以上面的正则匹配串实际上只有 ^[^省市区县村路街乡0-9a-zA-Z]+省$|是有效的。

因为|后面是空,测试case没有匹配省结尾,但会匹配后面分支的空字符串,所以结果才会是 <re.Match object; span=(0, 0), match=''> 。而对于Match对象,除了None会被解释为False,其余的任何匹配即使是空字符串也会被解释为True。因此误报。

加括号后匹配符合预期:

import re

XZQH_PATTERN = (r"^[^省市区县村路街乡0-9a-zA-Z]+省$|"
                r"^(?!.*[一二三四五六七八九十]门市$)[^区县村路街乡]*[^超小鱼0-9a-zA-Z]市$|"
                r"^[^县镇区村路街乡]*[^小景胜假务东西南北中社业发港住车游护园校舍活墅工0-9a-zA-Z一二三四五六七八九十]区$|"
                r"县$")


def process_one(address: str):
    """
    判断单条地址是否仅包含行政区划
    :param address:
    :return: 是:True  否:False
    """
    if re.search("自治区", address):
        address = re.sub("自治区", "省", address)
    return re.search(XZQH_PATTERN, address)


if __name__ == '__main__':
    print(process_one("xx小区"))  # None

2.验证

s1 = 'a' 'b' 'c'

s2 = ('a' 'c'
      'b')

s3 = 'a' 'c'
'b'

print(f's1: {s1}')
print(f's2: {s2}')
print(f's3: {s3}')

# s1: abc
# s2: acb
# s3: ac

到此这篇关于python中字符串自动拼接的示例代码的文章就介绍到这了,更多相关python 字符串自动拼接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文