首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Powershell regex失败并出现意外结果

Powershell regex失败并出现意外结果
EN

Stack Overflow用户
提问于 2022-06-24 05:21:36
回答 3查看 70关注 0票数 1

如果某个单词在块中的任何地方存在,我将试图隔离一组行。

例如,我有以下文本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A1: blah blah
B1: blah blah foobar

A2: foobar blah blah
B2: blah blah foobar
C2: blah blah
D2: blah blah

A3: blah blah
B3: blah blah
C3: blah blah

块可以包含任意数量的行,用空行分隔,而我要查找的单词foobar可以在块中的任何位置--这是唯一的常量,起始数字列表(A1、B1等)是为了简单起见,这些更改完全是为了简单。

这就是我能想到的准则。显然,这不符合块线大小的动态性质。但至少这起作用是应该的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.*[\r\n]+.*(foobar).*[\r\n]+(.*[\n\r]){1}

Result:
A1: blah blah
B1: blah blah foobar

A2: foobar blah blah
B2: blah blah foobar
C2: blah blah

我进一步完善了正则表达式,并提出了以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(.\n?)*(foobar).*(\n?.)*

Result:
A1: blah blah
B1: blah blah foobar

A2: foobar blah blah
B2: blah blah foobar
C2: blah blah
D2: blah blah

这正是我所需要的,并且在我尝试过的每一个在线regex测试站点上都做得很好。但是一旦我把这个放到Powershell中,代码就会吐出所有的东西,没有过滤任何东西。

下面是我正在使用的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$regex = '(.\n?)*(foobar).*(\n?.)*'

$response = Invoke-RestMethod $url
$response | Select-String $regex -AllMatches | ForEach-Object {
    foreach($foorbar in $_.matches.Value) {
        $foobar | Out-File $fileOutput -Append
    }
} 

URL包含这些数据块的网页,而不是其他数据块。对于新的正则表达式,没有任何解析,但是旧的正则表达式按照它的假设工作。所以我假设这是正则表达式出了问题。

如果有人能指出这里有什么不对,非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-06-24 10:36:41

你的判断力

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$regex = '(.\n?)*(foobar).*(\n?.)*'

如果存在回车字符,则(\n?.)*可以跨空行匹配,因为.将与之匹配。(Windows使用CRLF行尾。)

由于同样的原因,Wiktor的regex (以(?:\n.+)*结尾)也将不适用于CRLF线尾。

相反,您可以使用,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$regex = '(?:[^\r\n]+\r?\n)*?.*foobar.*(?:\r?\n[^\r\n]+)*'

通过使用[^\r\n]而不是.来匹配不是回车或换行符(linefeed)的行中的至少一个字符,从而避免了这个问题。

票数 1
EN

Stack Overflow用户

发布于 2022-06-24 07:14:25

您可以使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$regex = '(?m)^(?:.+\n)*?.*foobar.*(?:\n.+)*'

regex演示。详细信息

  • (?m) -a RegexOptions.Multiline选项
  • ^ -任何行的开始
  • (?:.+\n)*? -任何零或更多(但尽可能少)非空行
  • .*foobar.* -一个包含foobar的行
  • (?:\n.+)* -零或更多(尽可能多)非空行。

在PowerShell中,您还可以使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$regex = '(?m)^(?:.+\n)*?.*foobar.*(?:\n.+)*'

$response = Invoke-RestMethod $url
($response | Select-String -Pattern $regex -AllMatches | %{ $_.Matches.Value }) -join "`r`n`r`n" >> $fileOutput
票数 1
EN

Stack Overflow用户

发布于 2022-06-24 08:42:37

首先拆分输入文本可以简化解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$lf = [Environment]::NewLine
$response -split '\r?\n\r?\n' -match 'foobar' -join "$lf$lf" >>$fileOutput
  • $response -split '\r?\n\r?\n'将文本拆分为双新行(空行)。模式\r?\n与单一的新行相匹配,既适用于\r\n,也适用于Unix \n风格。结果是一个文本块数组,删除了两个新行。
  • -match 'foobar'过滤文本块的数组,导致只包含“foobar”的这些块。注意,根据-match操作数是单个字符串还是字符串数组,LHS运算符的工作方式不同。对于单个字符串,结果将是一个boolean,它指示模式是否匹配。
  • 使用-join "$lf$lf",我们再次将匹配的文本块连接到一个字符串中,以产生所需的输出。
  • 最后,重定向操作符>>将字符串附加到输出文件(您也可以使用| Out-File -Append )。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72744752

复制
相关文章
linux重命名文件名_linux 文件重命名
https://blog.csdn.net/weixin_33724570/article/details/91909917
全栈程序员站长
2022/09/30
4.1K0
linux重命名文件名_linux 文件重命名
linux批量文件重命名命令_shell重命名文件指令
hello_10_2016-03-17.log hello_4_2016-03-17.log hello_8_2016-03-17.log
全栈程序员站长
2022/10/02
10.7K0
在 Linux 中重命名文件夹中的所有文件
在Linux系统中,有时候我们需要批量重命名文件夹中的所有文件,以便更好地组织和管理文件。本文将详细介绍几种在Linux中重命名文件夹中所有文件的方法,包括使用命令行工具和脚本等方式。
网络技术联盟站
2023/06/08
5K0
在 Linux 中重命名文件夹中的所有文件
删除,重命名文件
重命名文件----rename #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> //修改文件名 void REname(char *arr) { int ret=rename("你好世界.txt", arr); if (ret == 0) { printf("修改成功"); } else { printf("修改失败"); } } void test01() { char buf[] = "你好,世界.txt"; REname(b
大忽悠爱学习
2021/03/02
1.7K0
删除,重命名文件
java删除文件,重命名文件
在做项目时,遇到需要对文件做一些删除重命名等操作。基于java语言,保存代码段如下。
全栈程序员站长
2022/08/12
1.8K0
linux中文件重命名_如何在Linux中重命名文件?
This tutorial will walk you through the simple steps to rename a file in Linux.
全栈程序员站长
2022/09/30
8.3K0
自制安装程序~单文件~可安装windows服务~技巧!类似安装QQ!
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; using System.Xml; using System.IO; using System.IO.Compression; u
liulun
2022/05/09
4250
自制安装程序~单文件~可安装windows服务~技巧!类似安装QQ!
php案例 重命名文件
作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 代码 index.php 效果: 之前的 之后的 代码 index.php <?php //重命
贵哥的编程之路
2022/09/29
1.2K0
php案例 重命名文件
EditRename文件重命名工具
一款文件重命名工具。通过在文本编辑器中直接编辑多个文件的文件名来重命名文件,非常灵活,堪比一些强大的重命名工具,但更加易用。
季春二九
2023/03/24
1.1K0
EditRename文件重命名工具
python 图片重命名_python批量重命名文件
** 一个简单的python 脚本,用于图片批量重命名,非常简单但是也非常使用!
全栈程序员站长
2022/10/03
3.5K0
python 图片重命名_python批量重命名文件
文件批量重命名
# 把当前文件夹的所有文件重命名为 WF .... # 把这个路径下的所有文件先查找到 -- 遍历所有文件 :有一个新的名字WF .. rename(旧,新) import os file_path = os.getcwd() list1 = os.listdir(file_path) print(list1) # 当前目录每个名字前面加'WF ' for name in list1: new_name = 'WF ' + name os.rename(name, new_na
汪凡
2018/05/29
1.5K0
linux 重命名 文件夹_如何给文件批量重命名
上面的例子中,子模式 \d{4} 会捕捉4个连续的数字,捕捉的四个数字匹配模式对应 $1, 将会用于新的文件名。
全栈程序员站长
2022/09/30
7K0
linux 重命名 文件夹_如何给文件批量重命名
linux重命名文件和文件夹的区别_文件夹如何重命名
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/16
4.9K0
linux 文件重命名的命令是什么_linux移动文件并重命名
大家好,又见面了,我是你们的朋友全栈君。 就目前所知道的知识,有两种方法。 一、mv
全栈程序员站长
2022/09/30
5.6K0
cmd - 批量重命名文件
相信大家或多或少都遇到过类似的情况:从网上下载了好多图片(或者其他的文件),这些图片的名字往往都是些乱七八糟的字母数字的组合们想要一次性修改几十张上百张的图片的名字应该怎么办呢?
雨临Lewis
2022/01/11
2.8K0
cmd - 批量重命名文件
在Oracle中,如何移动或重命名数据文件?
其实利用OS拷贝也可以联机操作,不关闭数据库,但是只针对可以OFFLINE的数据文件,步骤如下所示:
AiDBA宝典
2023/04/27
1.8K0
在Oracle中,如何移动或重命名数据文件?
Python对文件进行重命名
import ossrcFile = './actwork/linkFile/allExtLinks - 副本.txt'dstFile = './actwork/linkFile/allExtLinks - copy.txt'try: os.rename(srcFile,dstFile)except Exception as e: print(e) print('rename file fail\r\n')else: print('rename file success\r\n')
狼啸风云
2020/10/28
1.5K0
使用shell对文件重命名
需要把上面2018年度下面的每个子目录的文件重命名,命名规则是就是改为1.jpg到n.jpg
咪啪咪啪
2019/11/15
1.1K0
点击加载更多

相似问题

css3中精灵图像的背景转换?

25

CSS3缩放动画背景图像精灵

12

褪色图像位置

21

设置背景中精灵图像位置的大小

20

jquery图像映射-如何更改背景精灵图像位置?

112
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文