我如何使用正则表达式多次捕获相同的文本?



我需要匹配字符串之前出现的字符。字符串可能出现多次,这意味着字符可能会改变。

测试主题:

§aUsername: Message, which happens to contain Username. §3Wow, Username again.

我想要三组,因为Username在受试者中出现了三次。

所需输出:

["Username", 'a']
["Username", 'a']
["Username", '3']

我写了这个正则表达式,但它只适用于出现一次Username

My (failed) try:

§(.).*?Username

编辑:该regex完全忽略第二次出现的Username,它应该匹配与第一次相同的字符(a)。

其输出:

["Username", 'a']
["Username", '3']

如果支持回溯中的量词(。. NET、Pyton PiPy模块或较新的Javascript引擎),你可以在lookbehind中使用捕获组。

匹配将是Username,组1将包含除换行符外的单个任意字符。

(?<=§(.)[^§]*)Username
  • (?<=正面向后看,左边是什么
    • §(.)组1中匹配§和capture单个任意字符
    • [^§]*匹配除§以外的任何字符,使用反字符类,任意次数
  • )后面看
  • Username逐字匹配

Regex演示

相关内容

最新更新