包含 _ 缩短为第一个和最后一个字符的字符串

String containing _ shorten to first and last character

提问人:Honza 提问时间:9/7/2023 更新时间:9/9/2023 访问量:42

问:

我有文件Text.txt包含:

有文本1 有文本2 有文本3 sometext4_sometext5_sometext6有文本7 有文本8 sometext9_sometext10有文本11

在 PowerShell 中,我只需要包含 _ 缩短到第一个和最后一个字符的字符串即可输出:

有的文本1 有的文本2 有的文本3 s4_s5_s6有的文本7 有的文本8 s9_s0有的文本11

我是 Powershell 的新手。

谢谢你的帮助。

字符串 PowerShell 子字符串

评论

0赞 Olaf 9/7/2023
欢迎使用 Stack Overflow。在这个论坛上,程序员自愿帮助其他程序员应对挑战。;-)有一些规则和最佳实践可以帮助您充分利用 SO。首先,您可以参加导览以获得概述,然后您可以停下来询问如何提问。为了让愿意帮助你的其他人更容易真正帮助你,你应该始终正确格式化你的代码,避免发布代码图像,并提供一个最小的可重现示例
0赞 yacc 9/8/2023
请显示您到目前为止编码的内容

答:

0赞 KG-DROID 9/9/2023 #1

它有点冗长的正则表达式,但我认为它能满足您的需求:

(?<=[^])[^\s_]+(?=[^\s_]|[^]\s)|(?<=\s[^])[^\s]+(?=[^\s_]_)

像这样使用:

sometext1 sometext2 sometext3 sometext4_sometext5_sometext6 sometext7 sometext8 sometext9_sometext10 sometext11' -replace '(?<=_[^_])[^\s_]+(?=[^\s_]_|[^_]\s)|(?<=\s[^_])[^\s_]+(?=[^\s_]_)

以下是正则表达式的解释: https://regex101.com/r/aYVoa6/1

评论

1赞 Honza 9/11/2023
谢谢你的帮助。完整代码为: # 读取 Text.txt 文件的内容 $content = [System.IO.File]::ReadAllText(“C:\Test\Text.txt”) # 定义正则表达式模式以匹配包含下划线的字符串 $pattern = '(?<=_[^_])[^\s_]+(?=[^\s_]_|[^_]\s)|(?<=\s[^_])[^\s_]+(?=[^\s_]_)' # 将匹配的字符串替换为缩短版本 $shortenedContent = [regex]::Replace($content, $pattern, { param($match) $match.组[1]。value -replace '$' }) # 将结果输出到文件 $shortenedContent |输出文件“C:\Test\Text output.txt”