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

Written by

in

文章目录
  • 在用下面正则判断输入地址是否属于仅行政区划地址时: 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
  • 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 字符串自动拼接内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python拼接字符串的7种方法总结 python分割和拼接字符串 Python字符串拼接六种方法介绍 python实现字符串和数字拼接 python3 拼接字符串的7种方法 Python拼接字符串的7种方式详解 Python字符串拼接的4种方法实例 Python 合并拼接字符串的方法 Python字符串拼接的几种方法整理
  • 目录
    • 1.背景
    • 2.验证

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

    • 对于同一行:相邻字符串字面量之间如果只包含空格,会自动拼接为一个整体对待。
    • 对于不同行:需要在外侧用括号表明是一个整体,python才会自动拼接。不带括号时换行会当作不同的字符串。

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

    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
    

    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 字符串自动拼接内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python拼接字符串的7种方法总结
    • python分割和拼接字符串
    • Python字符串拼接六种方法介绍
    • python实现字符串和数字拼接
    • python3 拼接字符串的7种方法
    • Python拼接字符串的7种方式详解
    • Python字符串拼接的4种方法实例
    • Python 合并拼接字符串的方法
    • Python字符串拼接的几种方法整理

    站内搜索