gpt4 book ai didi

regex - 如何在正则表达式中提取两个单独的组?

转载 作者:行者123 更新时间:2023-12-02 18:25:16 24 4
gpt4 key购买 nike

在本文中,我尝试提取以下行的所有标题和页码:

  1. 以 - 开头
  2. 后跟空格
  3. 然后是章节标题
  4. 然后是第 # 页,如下所示:#page=9&

这是我正在使用的原始文本的示例:

|   "Principles of Microeconomics 2e"   (null)
- "Preface" #page=9&zoom=0,0,58
| "1. About OpenStax" #page=9&zoom=0,0,150
| "2. About OpenStax resources" #page=9&zoom=0,0,248
| "3. About Principles of Microeconomics 2e" #page=9&zoom=0,0,544
| "4. Additional resources" #page=13&zoom=0,0,367
| "5. About the authors" #page=14&zoom=0,0,58
- "Chapter 1. Welcome to Economics!" #page=17&zoom=0,0,58
| "1.1. What Is Economics, and Why Is It Important?*" #page=18&zoom=0,0,338
| "1.2. Microeconomics and Macroeconomics*" #page=22&zoom=0,0,448
| "1.3. How Economists Use Theories and Models to Understand Economic Issues*" #page=23&zoom=0,0,565

我当前的正则表达式: (?:\-\s)(["'])(?:(?=(\\?))\2.)*?(?:page=)(?<=\=)(.*?)(?=\&)

当前使用此正则表达式匹配整行,但不会将所需的元素放入单独的组中。并且我在进行此分离时遇到了麻烦。

电流输出: current output

期望的输出:

Match 1: "Preface" #page=9&
Group 1: Preface
Group 2: 9

Match 2: "Chapter 1. Welcome to Economics!" #page=17&
Group 1: Chapter 1. Welcome to Economics!
Group 2: 17

我正在尝试提取一组中的标题和另一组中的页码。我怎样才能做到这一点?

最佳答案

开始于

sed -En 's/^-.*"([^"]+)".*page=([[:digit:]]+).*/\1\n\2/p' file
Preface
9
Chapter 1. Welcome to Economics!
17

sed 不使用 PCRE,因此您没有非捕获括号或环视等


更新以解决新的所需输出。

sed 由于没有任意变量,因此很难计算匹配项。使用具有相同正则表达式的 GNU awk:

gawk '
match($0, /^-.*"([^"]+)".*page=([[:digit:]]+)/, m) {
printf "Match %d: %s\n", ++n, m[0]
printf "Group 1: %s\n", m[1]
printf "Group 2: %s\n\n", m[2]
}
' file
Match 1: -   "Preface"   #page=9
Group 1: Preface
Group 2: 9

Match 2: - "Chapter 1. Welcome to Economics!" #page=17
Group 1: Chapter 1. Welcome to Economics!
Group 2: 17

3 参数 match() 函数需要 GNU awk。

关于regex - 如何在正则表达式中提取两个单独的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70311216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com