繁体   English   中英

正则表达式-比赛后捕获单词

[英]Regex - capture words after match

我有一个字符串,我试图匹配单词模式,这些单词模式直接出现在标签之后,也可能出现在标签之后的一个单词。 例如:

after_tag = r'here is sentence as an example where a [TAG] ~~M001~~ a word'
one_after_tag = r'here is sentence as an example where a [TAG] can ~~M001~~ a word'

我也想将其扩展为与连接词一起使用,这里也已被标记。 这也应该在[CONNECT]标记后的一两个字的窗口内工作,例如:

after_connect = r'here is a sentence where a [TAG] could [CONNECT] ~~M002~~'
one_after_connect = r'here is a sentence where a [TAG] could [CONNECT] a ~~M002~~'

我在Python中使用re包尝试了以下正则表达式。

regex_current = re.compile(((?:(?<=(\{TAG})))(.*?)\~\~[A-Z0-9]{4,5}\~\~))

任何人都可以帮忙吗? 我发现以下网站对测试很有帮助。

这是同时匹配~~...~~单词的一种解决方案:

(?<=\[TAG\])( \w*)? ~~\w*~~
  1. 比赛前寻找[TAG]
  2. 匹配一个或更少的单词,没有~
  3. 匹配日~字。

如果它们之间也有一个单词也将被匹配,那么您可以将第二个单词分组或拆分结果并使用最后一个索引。

这是例子

同样包含CONNECT例子or相同的东西:

(?<=\[TAG\])( \w*)? ~~\w*~~|(?<=\[CONNECT\])( \w*)? ~~\w*~~

正则表达式精确无误,但后向搜索需要恒定的宽度。 如果您不介意匹配TAG,可以将其缩短为:

\[(TAG|CONNECT)\]( \w*)? ~~\w*~~

只有在您希望有更多~~LettersAndDigits~~单词的情况下,才需~~LettersAndDigits~~ 如果没有,您可以精确搜索

~~\w*~~

没有任何幻想。

最后加法

两个确保TAGCONNECT出现(可选CONNECT):

\[TAG\]( \w*)?( \[CONNECT\]( \w*)?)? ~~[\w]*~~

这是小提琴 在这种情况下,仅要获取单词,我将明确使用grouping () ,因为匹配长度是可变的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM