matlab的正則表達式

regexp——用於對字符串進行查找,大小寫敏感;
regexpi——用於對字符串進行查找,大小寫不敏感;
regexprep——用於對字符串進行查找並替換。
前端

第一部分——單個字符的匹配
1 句點符號 '.' ——匹配任意一個(只有一個)字符(包括空格)。
例如:t.n,它匹配tan、 ten、tin和ton,還匹配t#n、tpn甚至t n
Matlab例子程序:
clear;clc正則表達式

str='ten,&8yn2tin6ui>&ton, t n,-356tpn, t#n,4@).,t@nT&nY';app

pat='t.n';ui

[o11,o22,o33]=regexpi(str,pat,'start','end','match');%輸出起始位置和子串spa

匹配結果:.net

2 方括號符號 '[oum]' ——匹配方括號中的任意一個
例如:t[aeio]n只匹配tan,Ten,tin和toN等。regexp

3 方括號中的鏈接符 '[c1-c2]' ——匹配從字符c1開始到字符c2結束的字母序列blog

4 \n 等 ——特殊字符
下面是一些匹配單個字符的轉義字符正則表達式及所匹配的值。
\xN或\x{N} 匹配八進制數值爲N的字符
\oN或\o{N} 匹配十六進制數值爲N的字符
\a Alarm(beep)
\b Backspace
\t 水平Tab
\n New line
\v 垂直Tab
\f 換頁符
\r 回車符
\e Escape
\c 某些在正則表達式中有語法功能或特殊意義的字符c,要用\c來匹配,而不能直接用c匹配,如.用正則表達式.匹配,而\用正則表達式\匹配字符串

5 \w,\s和\d——類表達式
和上面的\n等表中的轉義字符有所不一樣,\w,\s,\d等匹配的不是某個特定的字符,而是某一類字符。具體說明以下:
\w匹配任意的單個文字字符,至關於[a-zA-Z0-9_];
\s匹配任意的單個空白字符,至關於[\t\f\n\r];
\d匹配任意單個數字,至關於[0-9];
\S匹配除空白符之外的任意單個字符,至關於[^\t\f\n\r]——方括號中的^表示取反;
\W匹配任意單個字符,至關於[^a-zA-Z0-9_];
\D匹配除數字字符外的任意單個字符,至關於[^0-9]。數學

第二部分串的匹配

1.屢次匹配{nstart,nend}

好比,咱們要匹配'ppp',那麼就能夠用正則表達式'ppp',還能夠記爲'p{3}'。

正則表達式中的'{}'用來表示匹配前面的表達式的出現次數。就是說,'p{2,3}',匹配'pp'和'ppp'。例如:

expr? 與expr匹配的元素出現0或1次,至關於{0,1}
expr* 與expr匹配的元素出現1次或更多,至關於{0,}
expr+ 與expr匹配的元素出現1次或更多,至關於{1,}
expr{n} 與expr匹配的元素出現n次,至關於{n,n}
expr{n,} 與expr匹配的元素至少出現n次
expr{n,m} 與expr匹配的元素出現n次但很少於m次

(1)假設匹配號碼格式999-99-9999:[0-9]{3}-[0-9]{2}-[0-9]{4}
(2)若連字符號能夠出現也能夠不出現:[0-9]{3}-?[0-9]{2}-?[0-9]{4}

(3)使用expr*時,matlab將盡量的匹配最長的字符子串。

(4)若是咱們但願匹配儘量短的字符子串時,能夠在上面咱們使用的字符串後使用'?',也就是expr*?,如:

>> str='<tr valign=top><td><a name="19184"></a>xyz';

regexp(str,'<.*?>','match')

ans =

'<tr valign=top>' '<td>' '<a name="19184">' '</a>'

 

regexp(str,'<.*>','match')

ans =

'<tr valign=top><td><a name="19184"></a>'

(5)expr*+

先執行expr*,"遊標"(若是有的話)就指到了與expr*匹配的字符子串的最末端,而後從那裏開始再檢查下一個字符與後面的表達式是否匹配,若是匹配就繼續向前(若是一直成功則返回最長的字符串),若是不匹配則直接返回空。

  2.邏輯運算符

'exp|exp2':或

(expr) 將expr標記爲一組、匹配expr,並將匹配的字符子串標記起來以供後面使用。
(?:expr) 說明expr爲一組,至關於數學表達式中的()
例如:?lstr='A body or collection of such stories';
?regexp(lstr,'(?:[^aeiou][aeiou]){2,}','match')
ans =
'tori'
上面的表達式中{2,}對[^aeiou][aeiou]起做用,若是去掉分組,則只對[aeiou]起做用,以下所示:
?regexp(lstr,'[^aeiou][aeiou]{2,}','match')
ans =
'tio' 'rie'
(?>expr) expr中的每一個元素是一個分組
(?#expr) expr放在(?#和)之間是就是註釋。
^expr 匹配expr,而且出如今原字符串最前端的子串
expr$ 匹配expr,而且出如今原字符串最末端的子串
<expr 匹配expr,而且出如今一個單詞最前端的子串
expr> 匹配expr,而且出如今一個單詞最末端的子串
<expr> 更嚴格的單詞匹配,如:以s開頭,而且以h結尾的單詞
?regexpi(hstr, '<s\w*h>', 'match')
ans =
'such'
3. 左顧右盼——利用上下文匹配
這個也比較容易理解。就是利用上下文的匹配來找到咱們要找的內容。
expr1(?=expr2) 找到匹配expr1的子串,若是其後的字符串也匹配expr2
如,下面的例子查找全部在','以前的單詞。
 ? pstr = ['While I nodded, nearly napping, ' …
'suddenly there came a tapping,'];
?regexpi(pstr, '\w*(?=,)', 'match')
ans =
'nodded' 'napping' 'tapping'
expr1(?!expr2) 找到匹配expr1的子串若是其後的字符串不匹配expr2
下面的例子匹配全部不在','以前的單詞
?regexpi(pstr, '\w*+(?!,)', 'match')
ans = 
Columns 1 through 6
'While' 'I' 'nearly' 'suddenly' 'there' 'came'
Column 7
'a'
(?<=expr1)expr2 找到匹配expr2的子串,若是其前面的字符串也匹配expr1
下面的例子查找全部在','以後的單詞,注意:','以後可能有空格
?regexpi(pstr,'(?<=,\s*)\w*','match')
ans =
'nearly' 'suddenly'
(?<!expr1)expr2 找到匹配expr2的子串,若是其後的字符串不匹配expr1
下面的例子查找全部不在','以後的單詞,
?regexpi(pstr,'(?<!,\s*)\w*','match')
ans =
Columns 1 through 6
'While' 'I' 'nodded' 'early' 'napping' 'uddenly'
Columns 7 through 10
'there' 'came' 'a' 'tapping'

來源:https://blog.csdn.net/yf210yf/article/details/42421523


 

第三部分

tline= '530414.360 3390859.100 24.480 2719';

lineData = regexp(tline, strcat('\',divisionType,'+'), 'split');%使用'split'關鍵字在空格處拆分字符,空格能夠是一個或者多個空格

相關文章
相關標籤/搜索