AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[regex](coding)

Martin Hope
John
Asked: 2025-04-17 15:06:58 +0800 CST

为什么以 `[^.]` 结尾的正则表达式会意外匹配?

  • 3

考虑以下行(如在目录中):

6.1.34.2    Some text

(“2”后面有一个标签)。

当搜索到^\d\+[.]\d\+[.]\d\+[^.]选定的行(并从“6”到“4”)时,恕我直言,由于测试用例中的最后一个点,这是不正确的。

^\d\+[.]\d\+[.]\d\+\s未选择该线(如预期)。

我的问题是,第一个正则表达式有什么问题?

regex
  • 1 个回答
  • 32 Views
Martin Hope
BoomDizzle
Asked: 2025-04-12 00:53:10 +0800 CST

awk 提取文本块

  • 9

我正在尝试找出一个 awk 命令/脚本来从一个大文件中提取一段文本。我感兴趣的文件子部分如下:

  Board Info: #512
    Manufacturer: "Dell Inc."
    Product: "0X3D66"
    Version: "A02"
    Serial: "..CN7016343F00IE."
  Chassis Info: #768

主板信息和底盘信息行有 2 个前导空格,而缩进块有 4 个。我不想假设结束行以底盘信息开头(可能是其他内容),而只是依靠以 2 个空格开头的“下一行”。

这:

awk '/^\s{2}Board Info/,/^\s{2}[^B ]/' dump.txt

解决了这个特定的实例,但是如果不是“底盘信息”,结束块行以字母 B 开头(例如,BOM),则不起作用。

如果我使用:

awk '/^\s{2}Board Info/,/^\s{2}\S*/' dump.txt

结尾模式也与“Board Info”行匹配,所以我只获取了该行。如何在不硬编码结尾块(如上所述)的情况下获取缩进的块(前导 4 个空格),并且不依赖结尾模式“下一行恰好以 2 个前导空格开头”?

regex
  • 5 个回答
  • 72 Views
Martin Hope
limestreetlab
Asked: 2025-04-11 21:37:00 +0800 CST

如何捕获两个数字组之间的非数字组(有时包含特定格式的数字)?

  • 6

我一直在努力寻找一个可以捕获从不太干净的 pdf 文件中提取的数据的正则表达式:

每行应包含 1. 学校 ID(5 位数字)、2. 学校名称、3. 申请编号(编号)、4. 另一个编号(=offer#)

清晰的一行看起来像“10394 ABC School 50 34”,可以使用 捕获([0-9]{5})\s{2,}(\D+)\s+(\d*)\s+(\d*)。正常情况看起来像https://regex101.com/r/Mwv3bJ/1,忽略负向后视。

我遇到的问题是,一些学校的名称中包含部分邮政编码(1 或 2 个字母后跟 1 或 2 个数字,例如 W19 或 SW2),因此“10422 XYZ College W9 60 33”将被捕获为 (id: 10422)(school: XYZ College W)(applications: 9)(offers: 60)。https: //regex101.com/r/YeNmT7/1

我希望 (3:application#) 不捕获任何紧跟字母的数字,并且如果名称中存在这样的 \D{1,2}\d{1,2},则用 (2:school name) 捕获。我尝试使用非捕获组 (?:^\D{1,2}\d{1,2}$) 来去除任何潜在的邮政编码,但无效。

例子:

  • 18747 ABC 学校 50 14 //(18747)(ABC 学校)(50)(14)
  • 17646 EFG学校 W11 190 44 //(17646)(EFG学校 W11)(190)(44)

请指教。

regex
  • 2 个回答
  • 50 Views
Martin Hope
hope
Asked: 2025-04-11 16:17:24 +0800 CST

正则表达式函数用于匹配每个字符之间包含一个或多个分隔符的字符串的不规则变体

  • 5

我试图用正则表达式精确匹配“SA..”的这些变体(SAC、SAD、SAE、SAP、SAW、SAAC、SAAN、SAAS、SABE、SABW),但不区分大小写。
问题是每个单词的每个字符之间可能存在一个或多个分隔符(空格、反斜杠 /、点 . 、连字符 -),例如“ S /AC”、“SA.P”、“S / AB W”。
我最终得到了下面的模式,是的,它有效,但它很丑而且很长!:
有没有更好更紧凑的模式?

Option Explicit
Option Compare Text

Function MatchSAWord(ByVal inputText As String) As Boolean
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
   
    Dim sep As String, pat As String
   
    sep = "[ .\/-]*"
       
    pat = "\b(" & _
        "S" & sep & "A" & sep & "C" & "|" & _
        "S" & sep & "A" & sep & "D" & "|" & _
        "S" & sep & "A" & sep & "E" & "|" & _
        "S" & sep & "A" & sep & "P" & "|" & _
        "S" & sep & "A" & sep & "W" & "|" & _
        "S" & sep & "A" & sep & "A" & sep & "C" & "|" & _
        "S" & sep & "A" & sep & "A" & sep & "N" & "|" & _
        "S" & sep & "A" & sep & "A" & sep & "S" & "|" & _
        "S" & sep & "A" & sep & "B" & sep & "E" & "|" & _
        "S" & sep & "A" & sep & "B" & sep & "W" & _
        ")\b"
       
    With regex
        .Global = False
        .IgnoreCase = True
        .pattern = pat
    End With
    MatchSAWord = regex.Test(inputText)
End Function
regex
  • 1 个回答
  • 47 Views
Martin Hope
Anonymous
Asked: 2025-04-09 05:03:11 +0800 CST

折叠 mkfs 输出的最简单方法(退格键和空格键)

  • 5

我将 mkfs 的输出转储到日志文件中,但它以交互方式显示其进程,打印退格键以使光标返回,然后打印空格以删除,然后再次执行退格键并打印新消息。

在日志里看起来乱糟糟的。以下是我找到的办法,把一组 BS 合并到单个空间里。

# echo -e "AAABBB\x08\x08\x08\x08\x08\x08CCC" | sed -e 's/\(\x08\)\1\+/\1/g' -e 's/\(\x08\)/x/'
AAABBBxCCC

但是有没有更好的方法可以用正则表达式将 BSs + 空格 + BSs ... 序列折叠成单个空格字符?我可以编写二进制文件来实现,但在我看来,这有点矫枉过正……

示例输入为

# echo -e "123\x08\x08\x08   \x08\x08\x08456    789"

转换为

123 456    789

更新:一开始我说的是 mkfs 输出的。我给你看个例子,方便你理解字符集。

mke2fs 1.47.0 (5-Feb-2023)
fs_types for mke2fs.conf resolution: 'ext4'
Discarding device blocks:       0/16463361572864/1646336               done                            
Filesystem label=data_volume
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
412080 inodes, 1646336 blocks
82316 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1686110208
51 block groups
32768 blocks per group, 32768 fragments per group
8080 inodes per group
Filesystem UUID: c27f71c7-2d9e-4a33-9d54-449ab3e2f378
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables:  0/51     done                            
Writing inode tables:  0/51     done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information:  0/51     done

退格键未显示在上面的窗口中(复制粘贴后它们被删除)。

在此处输入图片描述

regex
  • 1 个回答
  • 57 Views
Martin Hope
Wang Xinghe
Asked: 2025-04-08 22:47:39 +0800 CST

正则表达式排除字符串末尾的字符

  • 5

例如,我有一些文本

aaa foo
bbb foo
ccc foo?
ddd foo
eee foo?
...

我想搜索所有foo不带 s 的字符?,例如上面文本中的第 1,2,4 行。该怎么做?

regex
  • 2 个回答
  • 25 Views
Martin Hope
JH Park
Asked: 2025-04-08 05:38:53 +0800 CST

使用 sed 和正则表达式从文件中提取字符串

  • 8

我想询问如何使用 sed 和正则表达式从文件中提取特定字符串。

以下是输入文本文件(testfile.txt)的示例:

# This file contains a short description of the columns in the
# meta-analysis summary file, named '/some/output/directory/result.txt'

# (Skipping some comment lines...)

# Input for this meta-analysis was stored in the files:
# --> Input File 1 : /some/input/directory/cohort1/dataset1_chrAll.regenie.txt
# --> Input File 2 : /some/input/directory/cohort2/subdir1/chrAll-out.txt
# --> Input File 3 : /some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
# --> Input File 4 : /some/input/directory/cohort3/resfile.txt
# --> Input File 5 : /some/input/directory/cohort4/regenie_res_chrAll.txt

从这个文件,我想提取输入文件名的列表,因此结果应该是这样的:

/some/input/directory/cohort1/dataset1_chrAll.regenie.txt
/some/input/directory/cohort2/subdir1/chrAll-out.txt
/some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
/some/input/directory/cohort3/resfile.txt
/some/input/directory/cohort4/regenie_res_chrAll.txt

以下是我尝试过的:

尝试 1

这是我使用的初始命令。

cat testfile.txt | sed -e 's/\/some\/input\/directory\/([A-z0-9\/\.\-]*)\.txt/$1/g'

结果:

sed: -e expression #1, char 55: Invalid range end

尝试 2

经过一番搜索后,我尝试使用反斜杠转义括号。

cat testfile.txt | sed -e 's/\/some\/input\/directory\/\([A-z0-9\/\.\-]*\).txt/$1/g'

结果:

sed: -e expression #1, char 56: Invalid range end

所以它并没有解决问题。

尝试 3

我也尝试过转义括号。

cat testfile.txt | sed -e 's/\/some\/input\/directory\/\(\[A-z0-9\/\.\-\]\*\)\.txt/$1/g'

结果:

# This file contains a short description of the columns in the
# meta-analysis summary file, named '/some/output/directory/result.txt'

# (Skipping some comment lines...)

# Input for this meta-analysis was stored in the files:
# --> Input File 1 : /some/input/directory/cohort1/dataset1_chrAll.regenie.txt
# --> Input File 2 : /some/input/directory/cohort2/subdir1/chrAll-out.txt
# --> Input File 3 : /some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
# --> Input File 4 : /some/input/directory/cohort3/resfile.txt
# --> Input File 5 : /some/input/directory/cohort4/regenie_res_chrAll.txt

这并没有引发错误,但这不是我想要的。

尝试 4

最后,我尝试添加 -r 选项,但不转义括号或方括号。

cat testfile.txt | sed -re 's/\/some\/input\/directory\/([A-z0-9\/\.\-]*)\.txt/$1/g'

结果:

sed: -e expression #1, char 55: Invalid range end

第一次尝试时显示相同的错误消息。

我想问我的命令行中存在什么问题以及是否有任何可能的解决方案。

谢谢。

regex
  • 5 个回答
  • 71 Views
Martin Hope
Jerome
Asked: 2025-04-06 12:35:08 +0800 CST

关于 ruby​​ 处理模式的开始和结束的困惑[重复]

  • 2
这个问题已经有答案了:
锚定正则表达式和非锚定正则表达式之间有什么区别? (1 个回答)
昨天休息。

在以下情况下,需要通过正则表达式从字符串中提取父项

input_string = "02150 ESPOO"
input_string[pattern]

无论pattern正则表达式是否是书尾(开始和结束),都会出现两种截然不同的结果/^\d{5}$//\d{5}/

在后一种情况下,我得到了期望的结果,而前一种情况则返回nil。为什么 bookened 正则表达式会失败?

regex
  • 1 个回答
  • 53 Views
Martin Hope
Benny Brudner
Asked: 2025-04-04 03:13:07 +0800 CST

正则表达式匹配正则表达式字符串中所有未转义的“$”

  • 8

我想建立一个正则表达式,以匹配代表$正则表达式的字符串中的所有未转义的内容。

在这种情况下,如果字符后面包含相同数量的反斜杠,则该字符不会被转义(每对反斜杠代表反斜杠字符本身,因此下一个字符不会被转义)。

我想出了这个模式: (?<!\\)(\\{2})*\$

解释:虽然这也会匹配 前面的反斜杠$,但这是我找到的最接近的解决方案。这确保了 前面的反斜杠数量相等,$而 前面没有其他反斜杠,因此反斜杠数量为奇数。

我的问题是,似乎我需要 2 个连续的非消耗组才能使反斜杠总数相等,但这是不可能的。还有其他方法可以做到这一点吗?

regex
  • 3 个回答
  • 68 Views
Martin Hope
Jo Makein
Asked: 2025-03-08 02:15:21 +0800 CST

如何在 Notepad++ 中的 N 个符号前换行?

  • 9

如何使用正则表达式查找/替换来换行,以便每行不会超过 20 个符号?

我发现了这个:

Find: \s(?<=.{20})
Replace: $0\r\n

这将是完美的,但是如果单词在 20 个符号之前开始,那么它会将大于 20 个符号的单词留在行中。

我需要一个类似的表达式,但是如果最后一项使行变大,它也应该转到新行,因此最后一行总是会有<20个符号。

我知道我很久以前就做过这个,也许是用了一些插件,但现在我无法让它工作。我该怎么做?

regex
  • 1 个回答
  • 81 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve