regex lookbehind

时间:2018-03-16 15:15:04

标签: regex powershell notepad++ lookahead lookbehind

我有正则表达式背后的问题!

这是我的示例文本:

 href="dermatitis>" "blah blah blah >" href="lichen-planus>" 

我希望匹配所有>"当且仅当前面有某个href=并且还有其他规则!

href=必须紧接在前一个引号之前。 (例如,文本中的第二个&ght;前面有href=,但href=不在前一个引号之前,我不希望它匹配)在我的文字中,是3 &ght;我希望第一个和第三个匹配,第二个不匹配基于我上面描述的统治。

我希望这个问题得到充分解释!我处理一些离线文本文件,我可以使用notepad ++,powershell或任何其他合适的引擎。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

Notepad ++不了解lookbehind,你必须使用Hask

  • 控制 + ˚F
  • 找到:\K
  • 检查环绕
  • 检查正则表达式
  • 在文件中搜索

<强>解释

href="[^"]*\K&gt;(?=")

答案 1 :(得分:0)

我知道我迟到了2年,但是无论如何:)这是解决方法:

$string = 'href="dermatitis&gt;" "blah blah blah &gt;" href="lichen-planus&gt;"'
$value = '&gt;"'
$regex = 'href=".+?(' + $value + ')'
([regex]::matches($string,$regex).groups.value) | ? {$_ -eq $value}

哪个将返回第一和第三值:

&gt;"
&gt;"

答案 2 :(得分:-1)

通过PowerShell攻击它的另一种方法也可以删除不需要的&gt;

# 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("&gt;","") }

# Show the results
$sampleMatches

这将返回两个对象:

href="dermatitis>"
href="lichen-planus>"

答案 3 :(得分:-2)

如果您的输入在每个项目之间始终有空格,那么您可以在PowerShell中执行此操作:

$a = '"href="dermatitis&gt;" "blah blah blah &gt;" href="lichen-planus&gt;"'
$b = $a.Split(" ")
$c = $b | ? { $_ -match 'href="' }
Write-Output $c