python封装正则,剪切字符串

使用Python处理字符串的时候,有很多时候只需要字符串的一小部分,而不需要中间的标识符。
比如“text#你好,世界#”,只需要里面的中文文字。
这种时候,常规的做法是,先以#为标识,提取出#你好,世界#,然后再提取出“你好,世界”。
然而这种情况很多,每次都这样繁琐地提取,有违Python的简洁优雅。
所以我将这部分正则表达式封装了一个函数,方便调用。
结果发现意外地好用,大多数情况都可以用上,几乎不用写正则表达式了。

def cut_content(content,start,end):
    """
    # 清理边角,截取首尾中间部分
    :param content:原文本
    :param start:开始的标志
    :param end:结束的标志
    :return:中间的部分
    """
    start_store = start  #用于最后的字符串分割,防止增加转义符后,长度不对
    end_store = end
    new_string = ""
    # 将start以及end里面的特殊字符全部转意
    for item in start:
        #     .^$*+?[]|{}()等符号要加\转义
        if not re.search(r"[\.\^\$\*\+\?\[\]\|\{\}\(\)]", item) is None:
            new_string += "\\"
        new_string += item
    start = new_string
    new_string = ""
    for item in end:
        if not re.search(r"[\.\^\$\*\+\?\[\]\|\{\}\(\)]", item) is None:
            new_string += "\\"
        new_string += item
    end = new_string
    _str = ""

    try:
        _str = re.search(start + "(.|\n)*", content).group()
        if end != "":
            _str = re.search(start + "(.|\n)*?" + end, _str).group()
        # 去除多出来的前后缀
        _str = _str[len(start_store):len(_str)]
        if end != "":
            _str = _str[:len(_str)-len(end_store)]
    except:
        return None
    return _str
text = cut_content("text#你好,世界#", "#", "#")

简单地调用一下函数,就可以直接轻松获得中间的"你好,世界"。

最后附上完整实例,可以直接复制使用

# coding: utf-8
import re

def cut_content(content,start,end):
    """
    # 清理边角,截取首尾中间部分
    :param content:原文本
    :param start:开始的标志
    :param end:结束的标志
    :return:中间的部分
    """
    start_store = start  #用于最后的字符串分割,防止增加转义符后,长度不对
    end_store = end
    new_string = ""
    # 将start以及end里面的特殊字符全部转意
    for item in start:
        #     .^$*+?[]|{}()等符号要加\转义
        if not re.search(r"[\.\^\$\*\+\?\[\]\|\{\}\(\)]", item) is None:
            new_string += "\\"
        new_string += item
    start = new_string
    new_string = ""
    for item in end:
        if not re.search(r"[\.\^\$\*\+\?\[\]\|\{\}\(\)]", item) is None:
            new_string += "\\"
        new_string += item
    end = new_string
    _str = ""

    try:
        _str = re.search(start + "(.|\n)*", content).group()
        if end != "":
            _str = re.search(start + "(.|\n)*?" + end, _str).group()
        # 去除多出来的前后缀
        _str = _str[len(start_store):len(_str)]
        if end != "":
            _str = _str[:len(_str)-len(end_store)]
    except:
        return None
    return _str

if __name__ == '__main__':
    content = "现在是北京时间18点15分。"
    text = cut_content(content,"北京时间","。")
    print("现在的时间为:" + text)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 Python 的 re 模块可以方便地实现正则表达式字符串截取。下面是一个简单的示例: ```python import re # 待匹配的字符串 text = "Hello, my name is John. My email is john@example.com." # 使用正则表达式查找电子邮件地址 match = re.search(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text) if match: # 输出匹配到的电子邮件地址 print(match.group(0)) else: print("No email found.") ``` 在上面的示例中,使用 re.search() 函数查找字符串中的电子邮件地址。正则表达式 `\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b` 匹配符合电子邮件地址格式的字符串。如果匹配成功,使用 match.group(0) 输出匹配到的电子邮件地址。 ### 回答2: Python中使用正则表达式进行字符串截取非常方便。我们可以使用re模块来实现正则表达式的匹配和提取。 首先,我们需要导入re模块:import re 然后,我们可以使用re模块中的findall函数来匹配字符串中与正则表达式相匹配的部分。findall函数的调用方式是re.findall(pattern, string)。 例如,假设我们要从以下字符串中提取出所有的数字:string = "I have 10 apples and 5 oranges." 我们可以使用正则表达式"\d+",其中"\d"表示匹配数字字符,"+"表示匹配一个或多个。对应的Python代码如下: ``` import re string = "I have 10 apples and 5 oranges." numbers = re.findall("\d+", string) print(numbers) ``` 运行结果会输出:['10', '5'],即找到了两个数字 '10' 和 '5'。 除了findall函数,re模块还提供了其他一些函数,如search函数用于在字符串中搜索匹配的部分,并返回第一个匹配的结果;match函数用于从字符串开头匹配;sub函数用于替换与正则表达式匹配的部分等。 综上所述,Python使用正则表达式进行字符串截取可以通过re模块中的函数实现,根据具体的需求选择合适的函数进行匹配和提取操作。 ### 回答3: 在Python中,我们可以使用正则表达式来截取字符串Python提供了re模块,其中包含了处理正则表达式的函数和方法。 首先,我们需要导入re模块: import re 然后,我们可以使用re模块中的函数re.search()来搜索匹配的字符串。这个函数接收两个参数,第一个参数是正则表达式,第二个参数是要搜索的字符串。 例如,如果我们要截取一个字符串中的所有数字,可以使用以下代码: string = "hello123world" result = re.search("\d+", string) 这里的正则表达式"\d+"表示匹配一个或多个数字。如果找到了匹配的字符串,那么re.search()函数将返回一个匹配对象。我们可以通过调用匹配对象的group()方法来获取匹配的字符串。 例如,我们可以使用以下代码获取匹配的字符串: matched_string = result.group() print(matched_string) # 输出:123 除了re.search()函数,re模块还提供了其他的函数和方法来处理正则表达式,例如re.findall()函数可以查找所有匹配的字符串并返回一个列表。 总而言之,使用正则表达式可以帮助我们在字符串中截取想要的部分。通过学习和掌握re模块中的函数和方法,我们可以更加灵活地处理字符串截取的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值