我是RegEx的童话新手,但是我写了一个能处理大多数用例的正则表达式:
(\d*\.?\-?\d+)\s*\|\s*\[Link\]\(*https:\/\/redd\.it\/(\w+)\/*
,
...除了一个。我知道这可能会有所改善,以减少贪婪感,而且我愿意接受建议。
RegEx的要旨是捕获一对:
在标准化URL(https://redd.it/ capturethisnext )之前的任何数字(整数或十进制,数字之间包含连字符)。几乎所有情况下都带有“ |”在数字的末尾。有些行可以包含多个数字,这些数字可以与单独的标准化URL配对。
标准化URL的结尾ID:https://redd.it/ capturethisnext 。有些行中可以包含多个URL,这些URL需要与其前一位数字匹配。
链接中的第三行应与 0 相匹配,并且链接的一部分应为 0isamatchandthisisamatch 。我不知道如何使数字和URL之间的所有文本都是可选的,但我认为添加此逻辑可以简化事情。
非常感谢您的帮助。谢谢!
答案 0 :(得分:0)
以下是您要匹配的列表:
if (s == "a") { /* ... */ }
通常最好使RegEx尽可能简单。
这是我的RegEx字符串:
1|[Link](https://redd.it/1match)|4.5|[Link](https://redd.it/2match)
3000|[Link](https://redd.it/only1)|[9.5](https//otherlink.com)
0|https://redd.it/0isamatchandthisisamatch
Episode 1 | [Link](https://redd.it/spacesexist)
Episode 1-20 | [Link](https://redd.it/rangeofnumbers)
第一个组在匹配的字符串之前查找并与(?<=\/)(\w+)((?=\))|\n)
匹配,最后一个组与/
或换行符匹配。
编辑:
)
在这里,如果您的数据中有(?<=redd\.it\/)(\w+)((?=\))|\n)
。
或者在这里,如果您确定只想匹配https//otherlink.com/abc
之后的第一个单词:
redd.it/
答案 1 :(得分:0)
您似乎应该将[Link]
部分设为可选,并添加一些定界字符:
(\d+(?:[.-]\d+)?)[|\]\s]*(?:\[Link\]\()?https:\/\/redd\.it\/(\w+)