2012-02-13 652 views
4

我幾乎得到了這個正則表達式的工作,但是在前導斜槓上遇到問題 - 任何人都可以看到我在哪裏出錯?我只是想在這裏提取的第一個字符串在這個例子中,「項目」 - >http://regexr.com?300av正則表達式 - 去掉第一個和第二個正斜槓之間的文本

+0

作爲練習,請張貼滿闕而不是顯示外部代碼。 – anubhava 2012-02-13 14:01:04

+0

'^ \ /(。+)\ /.*$'並且獲得組1 – epoch 2012-02-13 14:04:23

回答

18

最簡單的方法是使用正斜槓

var firstString = url.split('/')[1]; 

,你將有第一個字符串分割字符串,但如果你想要使用正則表達式提取比這將做,只要記住不要在您的正則表達式中添加全局參數。

\/([a-zA-Z0-9]{0,}) 

我希望這有助於

+1

\ /(\ w +)將會更加簡潔,但是拆分方法反正可能更好 – wheresrhys 2012-02-13 14:05:53

2

看來你可以使用分割得到您的測試,但對於純粹的正則表達式的解決方案使用:

s = '/projects/personal/29/56'; 
arr = s.match(/^\/([^/]*)\//); // arr[1] becomes 'project' 
document.writeln('<pre>Matched: [' + arr[1] + "]</pre>"); 
2

我從anubhava答案發揮各地,並得到了以下

string       expression        returns 
/projects/personal/29/56  ([a-zA-Z])([^/]*)\/      projects/ 
/projects/personal/29/56  ([a-zA-Z])([^/]*)      projects 
/projects123/personal/29/56  ([a-zA-Z])*?([a-zA-Z][0-9])([^/]*)  projects123 

第二行實現了什麼bsod99問:刪除第一個slah /並從/projects/personal/29/56提取第一個字符串projects

1

爲尋求這種答案的人添加內容。除了url'/ projects'的第一部分之外,您還可以嘗試添加全局標誌以獲取其他值。

/projects/personal/29/56 

你只需要在最後遍歷數組目前[i]

/\/([a-zA-Z0-9]{0,})/g[i] 

expression      returns 
i=0        /projects 
i=1        /personal 
i=2        /29 
i=3        /56 
0

我在這裏加入了答案,只是因爲我想將它添加到[SO]: Python: return a string between // regex [duplicate]和問題被標記爲(這是我在編輯時的!!!)。

代碼

import re 


def main(): 
    group_name = "between_slashes" 
    words = [ 
       "en/lemon_peel/n/", 
       "ca/llimona/n/", 
       "/asd /", 
       "/asd", 
       "asdf/", 
       "aa//vv", 
      ] 
    pat = re.compile("^[^/]*/(?P<{}>[^/]*)/.*$".format(group_name)) 
    for idx, word in enumerate(words): 
     match = pat.match(word) 
     if match is not None: 
      print("{}: \"{}\" - \"{}\"".format(idx, word, match.group(group_name))) 
     else: 
      print("{}: \"{}\"".format(idx, word)) 


if __name__ == "__main__": 
    main() 

注意

  • 模式看起來很複雜,但我會盡我所能來解釋它:
    1. 的1 ST char(^)標誌着beginni字符串
    2. 以下[]的納克一個字符類匹配:(^/)告訴它的任何字符,但/
    3. 接着匹配的內容時,*告訴前一組(2),可能會發生0以上
    4. 然後它遵循/字符這是我們的1 ST(開始)後衛
    5. 括號()表示一組匹配 - 這可以通過其名稱(between_slashes)供以後引用。有關詳情,請[Python]: Regular Expression Syntax(搜索(?P<name>...)
    6. 括號之間的內容(>後)我們正在尋找的東西(我們已經知道什麼):0或多個非/字符
    7. /字符是我們的2 第二(結束)後衛
    8. 然後,.*告訴:任何字符,0次或多次
    9. 最後,$標記字符串的末尾
  • 我把增加更多串的自由要搜索,除了在問題中提供的那些,說明了一些極端情況
  • 運行於Python3Python2

輸出

c:\Work\Dev\StackOverflow\q45985002>c:\Install\x64\Python\Python\3.5\python.exe a.py 
0: "en/lemon_peel/n/" - "lemon_peel" 
1: "ca/llimona/n/" - "llimona" 
2: "/asd /" - "asd " 
3: "/asd" 
4: "asdf/" 
5: "aa//vv" - "" 
相關問題