我有正则表达式背后的问题!
这是我的示例文本:
href="dermatitis>" "blah blah blah >" href="lichen-planus>"
我希望匹配所有>"
当且仅当前面有某个href=
并且还有其他规则!
href=
必须紧接在前一个引号之前。 (例如,文本中的第二个&ght;
前面有href=
,但href=
不在前一个引号之前,我不希望它匹配)在我的文字中,是3 &ght;
我希望第一个和第三个匹配,第二个不匹配基于我上面描述的统治。
我希望这个问题得到充分解释!我处理一些离线文本文件,我可以使用notepad ++,powershell或任何其他合适的引擎。
任何帮助将不胜感激。
答案 0 :(得分:1)
Notepad ++不了解lookbehind,你必须使用Hask
。
\K
<强>解释强>
href="[^"]*\K>(?=")
答案 1 :(得分:0)
我知道我迟到了2年,但是无论如何:)这是解决方法:
$string = 'href="dermatitis>" "blah blah blah >" href="lichen-planus>"'
$value = '>"'
$regex = 'href=".+?(' + $value + ')'
([regex]::matches($string,$regex).groups.value) | ? {$_ -eq $value}
哪个将返回第一和第三值:
>"
>"
答案 2 :(得分:-1)
通过PowerShell攻击它的另一种方法也可以删除不需要的>
# Set the regular expression
$regex = '(?<=href\=")(.*?)(?=")'
$sampleText = 'href="dermatitis>&ght;" "blah blah blah >" href="lichen-planus>&ght;"'
# Separate the single line string into 3 entities with " " as the delimiter
$sampleTextSplit = $sampleText.Split(" ")
$sampleMatches = $sampleTextSplit | Where-Object {$_ -match $regex} | Foreach-Object { $_.Replace(">","") }
# Show the results
$sampleMatches
这将返回两个对象:
href="dermatitis>"
href="lichen-planus>"
答案 3 :(得分:-2)
如果您的输入在每个项目之间始终有空格,那么您可以在PowerShell中执行此操作:
$a = '"href="dermatitis>" "blah blah blah >" href="lichen-planus>"'
$b = $a.Split(" ")
$c = $b | ? { $_ -match 'href="' }
Write-Output $c