使用Regex从URL中提取字符串

时间:2014-07-01 01:43:12

标签: c# regex string url

我的代码可以在下面的3个可能的URL中给出,我想提取用户名' mrsmith '可以是任何类型的用户名,具体取决于传递的URL,而“某些网站' /#39; / artist /'和' / portfolio /'保持不变:

http://www.somewebsite.com/artist/mrsmith
http://mrsmith.somewebsite.com/
http://mrsmith.somewebsite.com/portfolio/variablenames

使用正则表达式有优雅的方法吗?

2 个答案:

答案 0 :(得分:3)

以下正则表达式会在/符号后跟.$(结束)

之后寻找mrsmith
(?<=\/)mrsmith(?=\.|$)

DEMO

<强>解释

  • (?<=\/)使用正面的后视镜。它将标记设置在/符号后面。
  • mrsmith(?=\.|$)再次检查字符串mrsmith,如果它在那里再次检查mrsmith字符串后面的符号是点还是结尾。如果这些条件为真,则它匹配相应的mrsmith字符串。

<强>更新

你的正则表达式是,

(?=www\.).*\/\K.*|(?<=http:\/\/)[^\.]*

OR

(?=www\.).*\/\K.*|(?!www\.)(?<=http:\/\/)[^\.]*

当一行包含/时,它匹配上一个www.后的字符串,或者如果http://不符合.,则匹配www.之后的字符串{{1}}出现在那条线上。

DEMO

答案 1 :(得分:0)

最简单的正则表达式

http:\/\/(.*?)\..*\/(.*)

这将匹配两个组子域和结束路径

所以这些将是上面三行的匹配

MATCH 1

  1. [7-10] www
  2. [34-41] mrsmith
  3. MATCH 2

    1. [49-56] mrsmith
    2. [73-73]``
    3. MATCH 3

      1. [81-88] mrsmith
      2. [115-128] variablenames
      3. 现在您可以选择哪个组是用户名

        例如,如果第一组有www,那么肯定第二组是第一组

        的名称

        在这里试试http://regex101.com/r/kE9bB4/1