跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一个正则表达式,在匹配 pattern1 的条件下,返回所有 pattern2 的字符串
未分類
7 9 月 2020

请教一个正则表达式,在匹配 pattern1 的条件下,返回所有 pattern2 的字符串

请教一个正则表达式,在匹配 pattern1 的条件下,返回所有 pattern2 的字符串

資深大佬 : billgreen1 7

text1="worda wordb aaaa wordc wordd worde 10, 20 and 35." text2="wordf bbbbb wordg wordh 11, 20 and 35." text3="wordi 11, 33, 44." 

要求是:当且仅当行中出现了 aaaa 这个字符串, 返回所有数字.

我尝试了以下方法:

import re  re.findall(r'(?:aaaa).*(d+)', text1) # ['5'] re.findall(r'(?:aaaa).*?(d+)', text1) # ['10'] # 期待结果是["10", "20", "35"]  # 虽然可以这样,但是我希望能有个一行的正则,而不是匹配 2 次 if re.findall("aaaa", text1):     numbers = re.findall("(d+)", text1) 

先行谢过啦~

大佬有話說 (2)

  • 資深大佬 : Herobs

    关键词:断言

  • 資深大佬 : calmzhu

    只想到个可以做到一次匹配提取,但需要自己处理过滤的。
    c = re.findall(r'(aaaa|d+)’,’worda wordb aaaa wordc wordd worde 10, 20 and 35.’)
    ‘aaaa’ in c and c.remove(‘aaaa’)

    主说的找不到,感觉有冲突。就像标题所言,

    必然存在 两步逻辑
    一个是跟据 pattern1 ( p1) 过滤
    一个是跟据 pattern2 ( p2)提取
    并且 p1 p2 是一对多,假设存在 pTrue 可以满足 re.findall(pTrue,text1)可以返回所有主所需字符串

    正则模式是连续可变滑动窗口或者窗口组

    要么用一个大滑动窗口 把所有 p1 + p2 全部覆盖

    要么一组窗口分别覆盖 p2 把 p1 拆入每个 p2

    不管哪种,即使使用零款断言的情况下, 窗口中都一定会有有d+之外的其他信息。比如我上面的例子,就包含了过滤信息

    或者说过滤+提取两步逻辑是必然有中间结果的。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具