标签: lookbehind

RegEx Advanced:积极的外观

这是我的测试字符串:

<img rel="{objectid:498,newobject:1,fileid:338}" width="80" height="60" align="left" src="../../../../files/jpg1/Desert1.jpg" alt="" />
Run Code Online (Sandbox Code Playgroud)

我想在rel属性之间获取每个JSON形成的元素.它适用于第一个元素(objectid).

这是我的ReqEx,工作正常:

(?<=(rel="\{objectid:))\d+(?=[,|\}])
Run Code Online (Sandbox Code Playgroud)

但我想做这样的事情,这是行不通的:

(?<=(rel="\{.*objectid:))\d+(?=[,|\}])
Run Code Online (Sandbox Code Playgroud)

所以我可以解析搜索字符串的每个元素.

我正在使用Java-ReqEx

java regex lookbehind

5
推荐指数
1
解决办法
1980
查看次数

量词范围不适用于后视

好的,所以我正在开发一个项目,我需要一个正则表达式,可以匹配*后跟1-4个空格或制表符,然后是一行文本.现在我正在使用.*在观察后进行测试.但是我可以让它明确匹配1,2或4个空格/制表符,但不能匹配1-4.我正在测试以下块

*    test line here
*   Second test
*  Third test
* Another test
Run Code Online (Sandbox Code Playgroud)

这些是我正在测试的两种模式(?<=(\*[ \t]{3})).*,它们按照预期工作并匹配第二行,如果我用1,2或4替换3,那么如果我用1,4替换它形成以下模式(?<=(\*[ \t]{1,4})).*它不再匹配任何行和我老实说无法理解为什么.我试过谷歌搜索没有成功.我正在使用g(lobal)旗帜.

php regex lookbehind quantifiers

5
推荐指数
1
解决办法
1016
查看次数

积极向后看vs不自拍组:不同的行为

re在代码中使用python正则表达式(模块),并注意到在这些情况下的不同行为:

re.findall(r'\s*(?:[a-z]\))?[^.)]+', 'a) xyz. b) abc.') # non-capturing group
# results in ['a) xyz', ' b) abc']
Run Code Online (Sandbox Code Playgroud)

re.findall(r'\s*(?<=[a-z]\))?[^.)]+', 'a) xyz. b) abc.') # lookbehind
# results in ['a', ' xyz', ' b', ' abc']
Run Code Online (Sandbox Code Playgroud)

我需要得到的就是正义['xyz', 'abc']。为什么示例的行为有所不同,又如何获得期望的结果?

python regex lookbehind capturing-group

5
推荐指数
1
解决办法
1484
查看次数

Vim正面看后面的bug?

在文件中输入:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Hello
A

Hello
B
Run Code Online (Sandbox Code Playgroud)

然后使用/以下方法搜索:

\(Hello\n\)\@<=A
Run Code Online (Sandbox Code Playgroud)

在我的Vim版本(7.4,包含的补丁:1-582)中,A底部Hello按预期匹配,B不是,但A第一行的第446位匹配.

这也有一些奇怪的行为,如果我用更多的As 做更长的线,632nd A会突出显示.如果我在行的开头引入16个空格,则该行上的第447个和第632个字符匹配.

我的问题是,这是否会影响其他人,这是一个真正的错误还是我的搜索错误?

regex vim lookbehind

5
推荐指数
1
解决办法
68
查看次数

grep regex lookahead或字符串的开头(或lookbehind或字符串的结尾)

我想在匹配之前匹配一个可能包含一种字符的字符串,或者匹配可以从字符串的开头开始(对于字符串的结尾也是如此).

对于一个最小的例子,考虑n.b.我想要在一行的开头和一行的结尾或两个非单词字符之间或某种组合匹配的文本.最简单的方法是使用单词boundary(\bn\.b\.\b),但这不匹配; 类似的情况发生在其他所需的匹配中,其中包含非单词字符.

我目前正在使用(^|[^\w])n\.b\.([^\w]|$),它可以令人满意地工作,但也会匹配单词之前和之后出现的非单词字符(如短划线)(如果可用).我在grep中执行此操作,因此虽然我可以轻松地将输出传递给sed,但我使用的是grep --color选项,在使用其他命令时会被禁用(出于显而易见的原因).

编辑:\K选项(即(\K^|[^\w])n\.b\.(\K[^\w]|$)似乎工作,但它也确实丢弃输出中匹配的颜色.虽然我可以,再次,调用辅助工具,我喜欢它,如果有一个快速和简单的解决方案.

编辑:我误解了\K操作员; 它只是在使用前删除匹配中的所有文本.难怪它没有为输出着色.

regex grep lookahead lookbehind

5
推荐指数
1
解决办法
3610
查看次数

使用.NET正则表达式在引号之间解析文本

我有以下输入文字:

@"This is some text @foo=bar @name=""John \""The Anonymous One\"" Doe"" @age=38"
Run Code Online (Sandbox Code Playgroud)

我想用@ name = value语法解析值作为名称/值对.解析前一个字符串应该会产生以下命名的捕获:

name:"foo"
value:"bar"

name:"name"
value:"John \""The Anonymous One\"" Doe"

name:"age"
value:"38"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下正则表达式,它几乎让我:

@"(?:(?<=\s)|^)@(?<name>\w+[A-Za-z0-9_-]+?)\s*=\s*(?<value>[A-Za-z0-9_-]+|(?="").+?(?=(?<!\\)""))"
Run Code Online (Sandbox Code Playgroud)

主要问题是它捕获了开头的报价"John \""The Anonymous One\"" Doe".我觉得这应该是一个后视而不是前瞻,但这似乎根本不起作用.

以下是表达式的一些规则:

  • 名称必须以字母开头,并且可以包含任何字母,数字,下划线或连字符.

  • 不带引号的必须至少包含一个字符,并且可以包含任何字母,数字,下划线或连字符.

  • 带引号的值可以包含任何字符,包括任何空格和转义引号.

编辑:

以下是regex101.com的结果:

(?:(?<=\s)|^)@(?<name>\w+[A-Za-z0-9_-]+?)\s*=\s*(?<value>(?<!")[A-Za-z0-9_-]+|(?=").+?(?=(?<!\\)"))

(?:(?<=\s)|^) Non-capturing group
@ matches the character @ literally
(?<name>\w+[A-Za-z0-9_-]+?) Named capturing group name
\s* match any white space character [\r\n\t\f ]
= matches the character = literally
\s* match any white space character …
Run Code Online (Sandbox Code Playgroud)

.net c# regex lookahead lookbehind

5
推荐指数
1
解决办法
209
查看次数

如果以字符开头,则RegEx不匹配?

我有这个正则表达式:

/(((\w+)|(\.\w+)|(\#\w+)|\*)(\[(.+(=".+"|\*".+"|\^".+"|))\])?(::|:)?)+(?=[ \S]*\{)/gm

我试图用来匹配CSS选择器.考虑这个伪代码CSS输入:

.main {
  property: value;
}

.one, .two a[href$=".com"] {
  .subclass {
    property: value;
  }
}

.test:before, .test:after:active {}
Run Code Online (Sandbox Code Playgroud)

上面的模式将返回以下匹配:

['.body', '.one', '.two', 'a[href$=".com"]', '.subclass', '.test:before', '.test:after:active']
Run Code Online (Sandbox Code Playgroud)

我试图修改模式,以便psuedo选择器不匹配.因此所有其他匹配应该仍然有效,但.test:before应该只是.test.test:after:active应该匹配.test.如果没有负面的后视,或者如果第一个角色是一个不匹配的方法,我想不出这样做的方法:.

我在Node中实现这个,我不想将我的脚本锁定到Node> 9.2.0只是为了在我的正则表达式中使用负面的后台.

任何想法将不胜感激!

javascript regex lookbehind

5
推荐指数
1
解决办法
540
查看次数

Python正则表达式的回顾与展望

我需要从具有以下格式的字符串中匹配字符串“ foo”:

string = "/foo/boo/poo"
Run Code Online (Sandbox Code Playgroud)

我绑了这段代码:

poo = "poo"
foo = re.match('.*(?=/' + re.escape(poo) + ')', string).group(0)
Run Code Online (Sandbox Code Playgroud)

它为我/foo/boo提供了foo变量的内容(而不是just foo/boo)。

我尝试了这段代码:

poo = "poo"
foo = re.match('(?=/).*(?=/' + re.escape(poo) + ')', string).group(0)
Run Code Online (Sandbox Code Playgroud)

我得到的是相同的输出(/foo/boo而不是foo/boo)。

我如何只匹配foo/boo零件?

regex lookbehind regex-lookarounds

5
推荐指数
2
解决办法
5462
查看次数

解析多个名称 - 正则表达式中间的Lookbehind不起作用

我无法使这个正则表达式工作,我找到的任何罐头工作都没有可靠的工作.

期望的结果:

通过正则表达式匹配生成以下内容:

"Person One"
"Person Two"
"Person Three"
Run Code Online (Sandbox Code Playgroud)

在这些示例行中:

By Person One, Person Two and Person Three
By Person One, Person Two
By Person One
By Person Two and Person Three
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的并注意到,如果你中断了部分,我会得到部分匹配,但是看起来有些东西会把它扔掉.此外,如果有一个更简单但更可靠的方法来拉动所有"人",无论是否提供一个,两个或三个"和".它没有支持比三个以上,但只要"和"道最后的"人"的肯定#可以保持变量不影响正则表达式,我觉得.

保存当前尝试(匹配一个,但如果你拆分我的后视并运行它然后它匹配所有"和"行:

(?<=by )((\w+) (\w+))(?:,\s*)?((\w+) (\w+))?(?:\s*(?<=and ))((\w+) (\w+))
Run Code Online (Sandbox Code Playgroud)

https://regex101.com/r/z3Y9TQ/1

regex lookbehind

5
推荐指数
1
解决办法
139
查看次数

正则表达式 - 匹配句子中每个单词的所有字母

我几乎得到了答案,但我错过了一些东西,我希望有人可以帮助我.

我需要一个正则表达式,它将匹配句子中每个单词的第一个字母.然后我需要用正确数量的星号替换匹配的字母.例如,如果我有以下句子:

There is an enormous apple tree in my backyard.
Run Code Online (Sandbox Code Playgroud)

我需要得到这个结果:

T**** i* a* e******* a**** t*** i* m* b*******.
Run Code Online (Sandbox Code Playgroud)

我设法想出一个几乎可以做到的表达式:

(?<=(\b[A-Za-z]))([a-z]+)
Run Code Online (Sandbox Code Playgroud)

使用上面的例句,该表达式给了我:

T* i* a* e* a* t* i* m* b*.
Run Code Online (Sandbox Code Playgroud)

如何获得正确数量的星号?

谢谢.

regex lookahead lookbehind

4
推荐指数
1
解决办法
1万
查看次数