在双/三线断点上拆​​分字符串

时间:2016-02-16 13:00:45

标签: regex powershell

我试图将JavaScript转换为插入"分隔线"双/三线断裂之间。

的JavaScript

html = html.replace(/\:\s*\n\s*/g, ":\n" ); //sentences ending with : is not the end of a paragraph, but the start of something new 
html = html.replace(/\n\s*\n\s*\n/g, replaceChar ); 
html = html.replace(/\n\s*\n\s*/g, replaceChar ); 

我想将它拆分成一个数组,而不是插入一个分隔线(replaceChar)。

我已经尝试了这一点但无法管理我做错的事情。

的PowerShell

$html = $html -replace "/\:\s*\n\s*/g", ":\n"
$html = $html -split "/\n\s*\n\s*\n/g" -split "/\n\s*\n\s*/g" 

例如:

$html = "Ipusm lorem – Outsourcing


ipsum lorem lorem ipsum. ipsum. lorem:

test testads fsadf dsa fsa


            asdf dsa fdsa fdsa fsa .a fdsa dsa f."

$html[0] = "Ipusm lorem – Outsourcing"
$html[1] = "ipsum lorem lorem ipsum. ipsum. lorem:
test testads fsadf dsa fsa"
$html[2] = "asdf dsa fdsa fdsa fsa .a fdsa dsa f."

2 个答案:

答案 0 :(得分:2)

如果在不需要冒号之后保留换行符,我会将冒号后的连续空格分解为单个空格,将结果拆分为换行符,然后删除空行:

$html -replace ':\s*', ': ' -split '\n' | Where-Object { $_.Trim() }

如果你想修剪其余的线条,请修改上面的内容:

$html -replace ':\s*', ': ' -split '\n' | ForEach-Object { $_.Trim() } |
    Where-Object { $_ }

根据输入和您的要求,您可以在冒号之后重新添加换行符:

$html -replace ':\s*', ': ' -split '\n' |
    ForEach-Object { $_.Trim() -replace ':', ":`n" } |
    Where-Object { $_ }

另一种选择是在冒号后将换行符和后续空格分解为单个换行符,然后将该字符串拆分为2个以上的换行符:

$html -replace ':\n\s*', ":`n" -split '\n{2,}' |
    ForEach-Object { $_.Trim() } |
    Where-Object { $_ }

答案 1 :(得分:1)

您可以使用以下解决方案:

$html = "Ipusm lorem – Outsourcing`r`n`r`n`r`nipsum lorem lorem ipsum. ipsum. lorem:`r`n`r`ntest testads fsadf dsa fsa`r`n`r`n`r`n `r`n          asdf dsa fdsa fdsa fsa .a fdsa dsa f."
$chunks = $html -split "\r?\n(?:\p{Zs}*\r?\n){2,}\p{Zs}*"

以下是regex demo

正则表达式匹配:

  • \r?\n - linbreak(可选CR后跟LF)
  • (?:\p{Zs}*\r?\n){2,} - 两个或更多序列:
    • \p{Zs}* - 零个或多个水平空白符号
    • \r?\n - 可选CR跟随LF
  • \p{Zs}* - 零个或多个水平空白符号

见输出:

enter image description here