正則匹配以xx開頭以xx結尾的單詞
在字串處理中,正則表示式是一大利器,但其對於初學者而言是存在一定的難度的。
而如何匹配以xx開頭以xx結尾的單詞呢?
假設需要匹配的字串為:site sea sue sweet see case sse ssee loses
需要匹配的為以s
開頭以e
結尾的單詞。
正確的正則式為:\bs\S*?e\b
無論什麼語言的正則的格式都一樣,下面以python為例來進行程式碼演示:
解釋一下:在python中re.findall函式表示匹配字串中所有的可能選項,findall()裡面第一個r表示row,忽略正則式中所有的轉義。
text ='site sea sue sweet see case sse ssee loses'
re.findall(r'\bs\S*?e\b',text)
結果為:['site', 'sue', 'see', 'sse', 'ssee']
下面來解釋一下:\b
代表單詞的開始或結束,常由標點符號、空格、換行等來作為分隔符
如果前後不加\b
,即正則表示式為:s\S*?e
執行結果就變成了
['site', 'se', 'sue', 'swe', 'se', 'se', 'sse', 'sse', 'se']
這樣匹配出來的就是不保證單詞的完整性,只要某一個單詞中含有s*e都會輸出來。
\S
表示任意非空字元,在這個問題中很容易想到的正則表示式是\bs.*?e\b
,即將\S
.
,但是這就會導致另外一種情況,這種情況的輸出為:
['site', 'sea sue', 'sweet see', 'sse', 'ssee']
可以看見出現了sea sue
等不是我們所期望的情況出現。
而至於*
自然是表示匹配任意多個字元。
而使用\S*?
是為什麼呢,為什麼要加?
呢?這就涉及到正則表示式的懶惰模式了。
如果使用.*
表示的就是貪婪模式,而.*?
表示的就是懶惰模式。
貪婪模式下會盡量匹配最長的字串,而懶惰模式會盡量匹配最短的字串。
舉個栗子:
對於字串abcgabc
貪婪模式– a.*c
–得到的答案為:abcgabc
懶惰模式– a.*?c
abc
,abc
例子參考的是學習python的一個網站——Crossing的程式設計教室
相關推薦
正則匹配以xx開頭以xx結尾的單詞(轉載)
在字串處理中,正則表示式是一大利器,但其對於初學者而言是存在一定的難度的。 而如何匹配以xx開頭以xx結尾的單詞呢? 假設需要匹配的字串為:site sea sue sweet see case sse ssee loses 需要匹配的為以s開頭以e 結尾的單詞。 正確
正則匹配以xx開頭以xx結尾的單詞
在字串處理中,正則表示式是一大利器,但其對於初學者而言是存在一定的難度的。 而如何匹配以xx開頭以xx結尾的單詞呢? 假設需要匹配的字串為:site sea sue sweet see case sse ssee loses 需要匹配的為以s開頭以e 結尾
正則匹配輸入只能包含小寫字母和.,以字母開頭/結尾
ava pub mat 字母 group ssss str out main import java.util.regex.Matcher;import java.util.regex.Pattern;public class CC { public static v
linux正則表達式,(以grep為例)
ant per egrep 大小寫 則表達式 spa 表示 中括號 第四章 第一章 基礎正則表達式^word 匹配以word開頭的內容word$ 匹配以我word結尾的內容^$ 表示空行. 代表有且只代表任意一個字符\ 轉義符號,例如. 就只代表點本身,讓有著特殊身份意義
python中正則匹配字符配置單詞邊界不生效的解決辦法
re python duoceshi #-*-coding:utf-8-*-import rename="duoceshi"p= re.compile(‘\bduoceshi\b‘)f = p.search(name)if f: print f.group()################
正則匹配 替換..追加..
bbs csdn 正則 flow code pan net eval nbsp 這裏都是以 圖片中的元素為例: 匹配出IMG標簽中alt的值: 1 Regex reg = new Regex(@"(?is)(?<=<img[^>]*)[^""]*(?
day11 grep正則匹配
collect lec linux 取反 pat 至少 判斷 con set ps aus | trep nginx # 查看所有正在運行的nginx任務 別名路徑: alias test_cmd=‘ls -l‘ PATH路徑: 臨時修改:
常用的正則匹配
marked clas 字符串 輸入 har round back [0 num 1.判斷只能輸入數字和字母 var num_char = /^[0-9A-Za-z]+$/; ^ :代表匹配字符串開始位置; [0-9A-Za-z]+ :[0-9A-Za-z]匹配數
js 對表單的一些驗證及正則匹配
攻擊 update 匹配規則 asc htm out gin lease public 利用的是jq的validate.js 詳見菜鳥教程http://www.runoob.com/jquery/jquery-plugin-validate.html 以下是我測試的幾個文件
正則匹配所有的a標簽
結束 strong 分組 正則匹配 ref val 所有 a標簽 解釋 <a\b[^>]+\bhref="([^"]*)"[^>]*>([\s\S]*?)</a> 分組1和分組2即為href和value 解釋: <a\b
關於JAVA正則匹配空白字符的問題(全角空格與半角空格)
轉義 空白 測試 rgs com text color 如何 clas 今天遇到一個字符串,怎麽匹配空格都不成功!!! 我把空格復制到test.properties文件 顯示“\u3000” ,這是什麽? 這是全角空格!!! 查了一下 \s
正則匹配<img>
普通 空白字符 展開 反向引用 功能 php php應用 換行 一個 preg_match_all(‘/<img(.*?)src=\"(.*?)\"(.*?)>/is‘, $content, $matches); matches[0] 整個img標簽 match
js正則匹配的出鏈接地址
鏈接地址 匹配 ase lower length ont 正則匹配 nbsp case content為需要匹配的值 var b=/<a([\s]+|[\s]+[^<>]+[\s]+)href=(\"([^<>"\‘]*)\"|\‘([^
awk結合正則匹配
需要 上海 所有 統計 技術 領域 panda -1 數據處理 利用awk分析data.csv中label列各取值的分布. 在終端執行head data.csv查看數據: 1 name,business,label,label_name 2 滄州光松房屋拆遷有限公
正則匹配方法
blank csdn 關於 expr 取ip地址 數值 換ip 表達式 java 這裏是幾個主要非英文語系字符範圍(google上找到的): 2E80~33FFh:中日韓符號區。收容康熙字典部首、中日韓輔助部首、註音符號、日本假名、韓文音符,中日韓的符號、標點、帶圈或帶括
修正正則匹配日期---基於網絡未知大神的正則
http 日期 bsp question ges 基於 就會 貢獻 工作 今天工作時需要用到日期格式檢驗,於是發現未知的大神貢獻的一套正則表達式【1】,看起來很復雜; 但是經過測試發現有些問題: ((\d{2}(([02468][048])|([13579][26]
java正則匹配
java 成功 println 字符 示例代碼 括號 lan string main java正則提取需要用到Matcher類,下面給出案例示例供參考需要提取車牌號中最後一個數字,比如說:蘇A7865提取5,蘇A876X提取6import java.util.regex.M
python3 正則匹配[^abc]和(?!abc)的區別(把多個字符作為一個整體匹配排除)
mat obj python str 效果 目的 str1 排除 blog 目的:把數字後面不為abc的字符串找出來 如1ab符合要求,2abc不符合要求 1 str = ‘1ab‘ 2 out = re.match(r‘\d+(?!abc)‘,str) 3 4
python正則匹配——中文字符的匹配
pri bsp odi col div class cnblogs mat 結果 # -*- coding:utf-8 -*- import re ‘‘‘python 3.5版本 正則匹配中文,固定形式:\u4E00-\u9FA5 ‘‘‘ words = ‘stud
php 正則匹配出a標簽級a標簽中的內容
har set ext htm file 鏈接地址 header char pre <?phpheader("Content-type: text/html; charset=utf-8"); $str=file_get_contents("https://www.