提问人:Honza 提问时间:9/7/2023 更新时间:9/9/2023 访问量:42
包含 _ 缩短为第一个和最后一个字符的字符串
String containing _ shorten to first and last character
问:
我有文件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 的新手。
谢谢你的帮助。
答:
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”
评论