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
    • 最新
    • 标签
主页 / computer / 问题 / 1786951
Accepted
NotepadPlusPlus PRO
NotepadPlusPlus PRO
Asked: 2023-06-02 01:26:33 +0800 CST2023-06-02 01:26:33 +0800 CST 2023-06-02 01:26:33 +0800 CST

在同一行上多次搜索/替换的正则表达式

  • 772

我正在尝试使用正则表达式在同一行上多次搜索和替换。我相信 Regex 可以使用积极的前瞻/后视功能来做到这一点。

我有一长串州和机场的名单。我试图将它们全部成对放置 State, Aiport,一次一行。

这是输入

State, Airports
----------------
Chicago, ORD, MDW
NY, JFK, LGA, EWR
California, LAX, JWA, LGB, BUR

这是输出。

Chicago, ORD
Chicago, MDW  
NY, JFK
NY, LGA
NY, EWR
California, LAX
California, JWA
California, LGB
California, BUR

你能帮忙建议一个正则表达式或任何其他方法来完成这个吗?谢谢。

我为 Regex 使用 Notepad++,但可以为此使用任何文本编辑器。

notepad++
  • 4 4 个回答
  • 112 Views

4 个回答

  • Voted
  1. Ξένη Γήινος
    2023-06-02T02:01:49+08:002023-06-02T02:01:49+08:00

    那个正则表达式太复杂了。通过使用实际的编程语言,事情会简单得多。

    这里我举一个Python的例子。在此处获取 Python 。

    假设您有以下输入:

    Chicago, ORD, MDW
    NY, JFK, LGA, EWR
    California, LAX, JWA, LGB, BUR
    

    并且您想将其转换为给定的输出:

    Chicago, ORD
    Chicago, MDW  
    NY, JFK
    NY, LGA
    NY, EWR
    California, LAX
    California, JWA
    California, LGB
    California, BUR
    

    很简单,先把字符串拆成行,每行用逗号list分成几行。str最后返回第一个元素和相同的所有其他元素的组合list。

    lines = """Chicago, ORD, MDW
    NY, JFK, LGA, EWR
    California, LAX, JWA, LGB, BUR"""
    
    for line in lines.splitlines():
        lst = line.split(', ')
        first = lst[0]
        for e in lst[1:]:
            print(f'{first}, {e}')
    
    • 2
  2. Best Answer
    Toto
    2023-06-02T01:46:48+08:002023-06-02T01:46:48+08:00
    • Ctrl+H
    • 找什么:^(\w+,\h*)(\w+)(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?(?:,\h*(\w+))?
    • 用。。。来代替:$1$2\n(?3$1$3)(?4\n$1$4)(?5\n$1$5)(?6\n$1$6)(?7\n$1$7)(?8\n$1$8)(?9\n$1$9)
    • TICK 匹配案例
    • TICK 环绕
    • 选择正 则表达式
    • 取消勾选 . matches newline
    • Replace all

    解释:

    ^               # beginning of line
        (               # group 1
            \w+             # 1 or more word characters
            ,               # a comma
            \h*             # 0 or more horizontal spaces
        )               # end group 1
        (\w+)           # group 2, 1 or more word characters
        (?:             # non capture group
            \h*             # 0 or more horizontal spaces
            (\w+)           # group 3, 1 or more word characters
        )?              # end group, optional
    (?:,\h*(\w+))?      # same as above
    (?:,\h*(\w+))?      # same as above
    (?:,\h*(\w+))?      # same as above
    (?:,\h*(\w+))?      # ... 
    (?:,\h*(\w+))?      # ... 
    (?:,\h*(\w+))?      # ... 
    (?:,\h*(\w+))?      # ... 
    (?:,\h*(\w+))?      # ... 
    

    替代品:

    $1              # content of group 1
    $2              # content of group 2
    \n              # line feed, you can use \r\n for Windows
    (?3             # if group 3 exists
        $1              # content of group 1
        $3              # content of group 3
    )               # endif
    (?4\n$1$4)      # same as above
    (?5\n$1$5)      # ...
    (?6\n$1$6)      # ...
    (?7\n$1$7)      # ...
    (?8\n$1$8)      # ...
    (?9\n$1$9)      # ...
    

    屏幕截图(之前):

    在此处输入图像描述

    截图(之后):

    在此处输入图像描述

    • 1
  3. Destroy666
    2023-06-02T03:37:38+08:002023-06-02T03:37:38+08:00

    对于 Notepad++,如果你必须使用它,你也可以使用PythonScript :

    1. Plugins-> Plugins Admin...-> 检查PythonScript并单击Install。
    2. Plugins-> PythonScript-> New Script-> 在默认目录中创建它scripts。
    3. 添加这些内容并保存:
    import re
    
    def split_text(match):
      # Split by comma and any number of horizontal whitespace
      parts = re.split(',[\t ]*', match.group(1))  
      results = []
      
      # Skip first item and create strings with all the combinations
      for part in parts[1:]:
        results.append("%s, %s"%(parts[0], part))
        
      # Combine all parts with separated by newline
      return "\n".join(results)
    
    # Ensure proper matches and call split_text() handler function
    # (?!\A) - don't match start of file (first line)
    # [\w\t ,]+ - match only word characters, horizontal whitespace and commas
    editor.rereplace('^(?!\A)([\w\t ,]+)$', split_text);
    

    这适用于标题并保留它。

    • 1
  4. jcaron
    2023-06-02T20:58:22+08:002023-06-02T20:58:22+08:00

    我知道您要求在 Notepad++ 中使用正则表达式,但无论如何这里有一个 perl 单行代码:

    perl -nle '($state,@f) = split /,\s*/; print "$state, $_" for @f;' < txt
    

    解释:

    • perl: 调用 perl
    • -n标志:将对输入的每一行执行循环,并执行为每一行提供的代码
    • -l标志:自动删除输入的行尾并将其添加到输出
    • -e标志:使用提供的代码作为参数
    • ($state,@f) = split /,\s*/: 在有逗号的地方拆分行,用可选的空格分隔,将第一个值放在 $state 中,其余值放在数组中@f
    • print "$state, $_" for @f:对于@f(所以每个机场)中的每个项目,打印一条包含州和机场的行

    选择:

    perl -F',\s*' -le '$state = shift @F; print "$state, $_" for @F;' < txt
    
    • -F',\s*'标志:使用提供的分隔符正则表达式自动拆分,将结果存储在@F. 暗示-n。
    • $state = shift @F:从中删除第一项@F并将其存储在$state

    当然,芝加哥不是一个州 :​​-)

    • 1

相关问题

  • 在 Notepad++“另存为...”对话框中保留当前文件类型/扩展名

  • 计算文本字符串中的逗号并添加新行

  • 删除信息

  • Notepad++ 删除直到冒号替换所有行

  • NotePad++ 用户定义语言不显示条件语句

Sidebar

Stats

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

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve