查看: 191|回复: 3
打印 上一主题 下一主题

[求助] 请教python中一个正则表达式的用法

[复制链接]
  • TA的每日心情
    开心
    2020-11-30 19:14
  • 签到天数: 249 天

    [LV.8]以坛为家I

    15

    主题

    325

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    60114
    跳转到指定楼层
    1
    发表于 2022-8-7 21:45:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    今天遇到一个python中使用re模块进行正则搜索的案例,代码里有一句看不懂,请知道的朋友不吝赐教!

    sentences = re.split("(?<=[" + "".join(sent_separator) + "])\s*", text)

    想知道,pattern中调用字符串方法是怎么实现的?谢谢!

    该用户从未签到

    19

    主题

    523

    回帖

    8663

    积分

    进士

    Rank: 8Rank: 8

    积分
    8663
    2
    发表于 2022-8-7 23:18:22 | 只看该作者
    本帖最后由 entropy 于 2022-8-7 23:33 编辑

    "(?<=[" + "".join(sent_separator) + "])\s*"

    把三个字符串加起来,中间用到了.join() 方法,把 sent_separator 所有元素连在一起,用 "" 分隔。

    这种写法不怎么好。建议写成:fr'(?<=[{"".join(sent_separator)}])\s*'

    评分

    1

    查看全部评分

  • TA的每日心情
    开心
    2020-11-30 19:14
  • 签到天数: 249 天

    [LV.8]以坛为家I

    15

    主题

    325

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    60114
    3
     楼主| 发表于 2022-8-10 18:23:29 | 只看该作者


    谢谢回复。我想我知道错哪儿了。您说的是字符串"(?<=["、字符串"".join(sent_separator)和字符串"])\s*"进行拼接,得到新的字符串是吧。我先入为主地认为pattern是用冒号包围的,所以直接就将最两边的双引号考虑在外了,所以怎么也想不通" + "".join(sent_separator) + "这部分是咋拼接了。太囧了。谢谢最后的建议!优雅很多。
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    17

    主题

    393

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    14980
    4
    发表于 2022-9-26 13:55:40 | 只看该作者
    本帖最后由 mikeee 于 2022-9-26 14:23 编辑

    那地方也可以写成: fr'(?<={"|".join(sent_separator)})\s*'

    不过一般情况下分句远不止在sent_separator处断开那么简单。python的话或许可以考虑用 pypi 包 seg-text https://pypi.org/project/seg-text/或类似的包。