1. 程式人生 > >非常好用的正則表示式"\\s+"

非常好用的正則表示式"\\s+"

說起來,博主使用過的正則場景雖然不多,但是就是在這當中,我發現"\\s+"真好用!

詳解 "\\s+"

正則表示式中\s匹配任何空白字元,包括空格、製表符、換頁符等等, 等價於[ \f\n\r\t\v]

  • \f -> 匹配一個換頁
  • \n -> 匹配一個換行符
  • \r -> 匹配一個回車符
  • \t -> 匹配一個製表符
  • \v -> 匹配一個垂直製表符

而“\s+”則表示匹配任意多個上面的字元。另因為反斜槓在Java裡是轉義字元,所以在Java裡,我們要這麼用“\\s+”.

那麼問題來了,“\\s+”有啥使用場景呢?

API測試中,替換測試模板中的資料

在API自動化測試中,我們經常要用xml,或者json檔案,來儲存API payload。 比如下面這個模板:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<userInvite>
<toEmail>[email protected]</toEmail>
<toUserId>%s</toUserId>
<fromUserId>%s</fromUserId>
<groupId>123</groupId>
<inviteMetadataId>1</inviteMetadataId>
<status
>
created</status> <clilentId>xxxx</clilentId> <inviteProperties> <inviteProperty> <key>key</key> <value>value</value> </inviteProperty> <inviteProperty> <key>subject</key> <value
>
is inviting you</value> </inviteProperty> </inviteProperties> </userInvite>

而在測試的時候,我們就經常要替換模板中的資料,去測試API的邏輯。比如我要去掉key為subject的inviteProperty, 然後再Call這個API,怎麼辦呢?

OK,答案很明顯,我們只要替換他們就可以了,而這時候\\s+就可以派上用場了。

比如我們可以直接將其替換成空格:

payload.replaceFirst("<inviteProperty>\\s+<key>subject</key>\\s+<value>is inviting you</value>\\s+</inviteProperty>", "");

這裡的\\s+可以替換掉關鍵字之間的所有空白字元。

\\s+在經典演算法題:單詞反轉中的使用

有這麼一個經典演算法題:

輸入一串字元,然後按著單詞倒敘輸出

比如:
輸入 "the sky is blue",
輸出 "blue is sky the".

這題如果使用String的Split方法就非常方便,我們可以根據空格把字串分成單詞陣列,這樣就可以倒著輸出單詞就可以了。

但是如果單純的使用空格就會有很多缺陷,比如:

s.trim().split(" ");

如果輸入為這樣就會有問題 “a b”,用上面的程式碼,我們就會分拆出下面的結果:

最後分解出了四個元素!

很明顯跟我們的預期不一樣,我們希望是隻剩兩個單詞,所以如果使用\\s+,一切就完美多了!

最後給出完整演算法解決方案:

public static String reverseWords(String s)
{ String[] wordsArray = s.trim().split("\\s+");   
    StringBuilder result = new StringBuilder(); for(int i = wordsArray.length - 1; i >= 0 ; i--)
    { if(i == 0)
        {
          result.append(wordsArray[i]);
        } else {
          result.append(wordsArray[i] + " ");
        }
    } return result.toString();
}

總結

啥也不說了,何不試試呢?

相關推薦

非常表示式"\\s+"

說起來,博主使用過的正則場景雖然不多,但是就是在這當中,我發現"\\s+"真好用! 詳解 "\\s+" 正則表示式中\s匹配任何空白字元,包括空格、製表符、換頁符等等, 等價於[ \f\n\r\t\v] \f -> 匹配一個換頁\n -> 匹配一個換行符\r

java表示式判斷一個字串是否是車牌號

public boolean checkCarNumber(String content) { String pattern = "([京津滬渝冀豫雲遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陝吉閩貴粵青藏川寧瓊]{1}(([A-HJ-Z]{1}[A-HJ-NP-Z0-9]{5})|([A-HJ-

QT 表示式從tableView中篩選出某一日期範圍內的資料

QDate date1,date2; date1=ui->dateEdit_2->date();//提取開始時間 date2=ui->dateEdit_3->date();//提取結束時間 data_filter->

Java表示式判斷輸入的電話號碼格式是否正確

import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; /** *三大運營商號碼均可驗證(不含衛星通訊1349) */ p

怎麼表示式限制輸入框輸入數字的範圍(數字範圍是50-1000),怎麼限制輸入框輸入的數字是以9506開頭的

轉自 https://zhidao.baidu.com/question/1829801257322895700.html   <input type="text" onkeyup="var v=this.value||'';v=v.replace(/[^\d]/g,'')

鬥圖網鬥圖全站爬取(表示式re)

import  re  import requests import os class doutu_spyder():     first_url=[]     first_name=[]     headers=

PHP批量替換Img中src內容,表示式獲取圖片路徑實現縮圖功能

/** * 圖片地址替換成壓縮URL * @param string $content 內容 * @param string $suffix 字尾 */ function get_img_thumb_url($content="",$suffix="!c550x260.jpg") { // by

notepad++ 等表示式自動新增sql引號的技巧

轉:https://www.jb51.net/article/73605.htm notepad正則表示式新增sql引號,具體內容請看下文詳解。 一般sql語句會經常用到給括號裡的內容新增引號,sql如下 ? 1 2 3 4 5 6 7 8 S

表示式修改html字串的所有div的style樣式

 最近專案中有一介面返回的一個欄位是html格式的字串,裡邊每個div中style的高度是固定的px,然後再手機端顯示的時候發現,div中的內容重疊了;效果圖如下: 對應的div如下: 由於高度固定,一行內容顯示不完的情況下,內容換行的時候就出現重疊; 現在一種解決方案就是將heigh

c# 表示式獲取開始和結束字串中間的值

/// <summary> /// 獲得字串中開始和結束字串中間得值 /// </summary> /// <param name="str">字串</param> /// <param name="s">開始</param>

表示式表示IP,埠和子網掩碼

一、IP地址的正則表示式 1、無任何判斷: /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/ 2、判斷0.0.0.0不符合IP書寫規範: /^(25[0-5]|2[

表示式實現 計算器

#!/usr/bin/env python # coding:utf-8 import re def dealwith(express): express.replace('+-','-') express.replace('--','+') return express d

Python 表示式一次替換文章中所有特殊符號,如“-,$()#+&*”之類

一個簡單的正則表示式,可能會起大作用。比如說字符集就是這樣。一篇文章如果有各種亂碼,就可以用這種方法去除。如去除“-,$()#+&*”之類符號是很方便的。按照查詢、分割、替換的套路再做一做這樣的練習。今天晚了,後續還要操作檔案來完善這一點。 import re

python 遇到表情程式碼出錯, 表示式去掉表情程式碼

>>> aa = '\U0001f60a\adwkdkdkkdk' # 這裡“\U0001f60a” 這是表情的程式碼 帶這個\ >>> import re >>> cc = re.compile(r'\U0

JSP--非常的EL表示式

取值 不同版本的tomcat是否預設開啟對EL表示式的支援是不一定的。所以為了 保證EL能正常使用,需要在<%@page標籤里加上isELIgnored="false"。 在JSTL中輸出: <c:out value="${name}"/> 用

表示式匹配HTML標籤

<script> //匹配HTML標籤 方法一: var str = '<p class="odd" id="odd">123</p>'; var pattern = /<\/?[a-zA-Z]+(\s+[a-zA-

Perl表示式(3) - 表示式處理文字

用正則表示式處理文字 3.1 替換操作 3.1.1 用s///進行替換操作 (substitution) 如果把m//想象為文理處理器的字串“查詢”功能,那麼s///就是查詢並替換功能。 如:s/Barney/Fred/; 可以實現將Barney替

pycharm表示式匹配IP地址

“10.0.0.1|10.0.0.2|13.0.0.256|14.0.0.2|16.0.0.2|19.0.0.2|16.0.0.2|10.0.0.2|” #幫我匹配出 以10.0開頭的ip #匹配出符合要求的字串 #10.0. 以 10.0. 開頭的字串, 後面

表示式提取Cookie值

Cookie是以“;”進行分隔的鍵值對字串,因此如果要提取所以的鍵值,我們需要對字串進行“;”與“=”的split(分割)操作,如下: function initCookie() { var cookie = document.cookie,

表示式載入靜態頁面(HTML5+Jquery)

很多人可能用過Vie.js,網頁動態載入資料。一般來說,HTML在後面呼叫new Vue()載入資料的。Vue很有創意,在HTML中插入{{}}標記,使用HTML模板化,方便開發。但其也有一定不便。我受Vue啟發,想與Jquery結合(我很喜歡JQuery)。 我嘗試使用$Ajax()載入資料,並把資料顯示