我对大量文本表示歉意,但我对此无能为力,我想说清楚我的问题。
我目前正试图创建一个正则表达式来查找网站/电子邮件链接的结尾,以便随后处理地址的其余部分。我决定寻找地址的结尾(例如,“。com”,“。org”,“。net”);但是,在处理此问题时,我在两个方面遇到困难。 (我选择此方法是因为它最适合当前项目)
首先,我试图避开阻碍用户输入其中包含这些关键字的单词(例如,“ org” anisation”,“尝试输入”或g” o to”)。我如何解决这个问题,例如,正则表达式:
org(?!\w)
-如果关键字后紧跟字母,则跳过比赛。
第二个问题是找到地址的多余部分(例如“ www.website。“ org” .uk“),这些部分将不匹配。为了解决这个问题,例如,我使用了正则表达式:
org((\W*|\.|dot)\w\w)
-试图找到关键字后的前两个字母,因为大多数扩展名只有两个字母。
主要问题:
为了防止上述两种情况,我使用了类似于以下的正则表达式:
org(.|dot)\w\w|(?!\w)
但是,我不像想在Regex中找到解决方案那样精明,我知道这不会产生正确的结果。我知道Regex中有一种形式的“如果要那样做”,但我似乎无法理解我在该主题上找到的在线文档。
如果可能的话,有人可以解释我如何创建这样一个系统:
IF: NOT org(\w)
ELSE IF: org(.|dot)
THEN: MATCH org(.|dot)\w\w
ELSE: MATCH org
在此问题上的任何帮助,我真的很感激,这已经有一段时间了。我只是想看透,但是我不具备必需的知识。
编辑:
正则表达式需要通过的测试用例(这些示例专用于“ org”正则表达式):
(我在方括号“ []”中标记了匹配项,并在可能的匹配项中标记了“ <>”)
"Hello, please come and check out my website: www.website.[org]"
"I have just uploaded a new game at games.[org.uk]"
"If you would like quote please email me at email@email.[org.ru]"
"I have just made a new <org>anisation website at website.[org], please get in contact at name.name@email.[org.us]"
"For more info check info.[org] <or g>o to info.[org.uk]"
我希望这可以更好地了解Regex需要做什么。
答案 0 :(得分:2)
以下正则表达式:
(?i)(?<=\.)org(?:\.[a-z]{2})?\b
应该为您完成工作。
演示:
https://regex101.com/r/8F9qbQ/2/
说明:
(?i)
以区分大小写(.ORG
或.org
).
实际上是单词的一部分时,在org
之前有一个org
,以避免匹配。org
以匹配ORG
或org
(?:...)?
个非捕获组,可以出现0
至1
次\.[a-zA-Z]{2}
点后紧跟2个字母\b
单词边界约束答案 1 :(得分:1)
还有其他一些更简单的方法来捕获任何网站,但是假设您确实需要功能IF: NOT org(\w) ELSE IF: org(.|dot) THEN: MATCH org(.|dot)\w\w ELSE: MATCH org
,则可以使用:
org(?!\w)(\.\w\w)?
它将匹配:
www.domain.org.uk
的“ org.uk”
www.domain.org
的“ org”
但不匹配www.domain.orgzz
和orgzz
说明:
org(?!\w)
部分将与org
匹配,后跟字母字符。它将与org
的{{1}},org
的{{1}}相匹配,但与org
不相符。
然后,如果我们已经有了org.
,我们将尝试通过添加量词orgzz
来匹配其他org
,这意味着如果有匹配项,则将匹配(\.\w\w)
,但这不是必需的。
答案 2 :(得分:0)
我制作了一个正则表达式来捕获一个网站,只要它以'www.'
开头,后跟一些字符,后跟'.'
。
import re
matcher = re.compile('(www\.\S*\.\S*)') #matches any website with layout www.whatever
string = 'they sky is very blue www.harvard.edu.co see nothing else triggers it, www, org'
match = re.search(matcher, string).group(1)
#output
#'www.harvard.edu.co'
现在,您可以根据需要加强此功能,以避免误报。