我對正則運算式很陌生,我正在嘗試在第一個單詞后添加一個注冊商標符號 (?)。
這是我的字串:
productname L 67 MWA/Y
這應該是這樣的:
productname? L 67 MWA/Y
基本上我必須找到任何給定字串中第一個單詞的結束位置并添加一個?。我只是不知道如何正確地做到這一點。
我正在使用 docparser,它提供了一個函式來查找正則運算式并將其替換為某些內容。
這是他們關于如何使用它的資訊:https: //support.docparser.com/article/1290-how-does-the-regular-expression-regex-filter-work
這個站點是指https://regex101.com/所以它應該是相同的語法。
uj5u.com熱心網友回復:
旗幟
我將使用帶有mfor m ultipline 和uu nicode 支持的正則運算式(如果產品具有非拉丁字符):
圖案
^(\p{L} )\b
^匹配行的開頭。( )捕獲產品名稱或制造商。\p{L}匹配任何字母一次或多次。大多數人會使用\w任何單詞char。但這將不匹配,?否則?可能會出現問題。\b(可選)匹配單詞b oundary。
在這里測驗它:https ://regex101.com/r/nSl03I/1
如您所見,它不會處理產品名稱中的空格。您必須為此更改正則運算式,但您必須知道產品名稱背后的資料格式是什么。
替換
$1?$1捕獲的產品名稱在哪里。
如果您必須處理制造商中的空間
可能就是這種情況,所以會有點復雜,因為我們不知道它們可以有多少個空格。但我們可以假設第二個值是產品的尺寸(XXS、XS、S、M、L、XL、XXL甚至XXXL,如果我們愿意)。
在這種情況下,我們可以用這個正則運算式來解決它:
/^([\p{L} ] )\b\s (X{0,3}[LS]|M)/gmui
我使用了不區分大小寫i的標志,因此如果大小是小寫或大寫,它在這兩種情況下都有效。該標志僅用于全域,以便在第一次發現時不停止,而是在所有匹配中繼續。g
而不是
\p{L}我們習慣[\p{L} ]說它可以是一組用括號宣告的字符[ ],所以我只是添加了一個空格。我們可以使用\s,但這也會匹配制表符或新行,所以我不希望它更安全一點。我們在前面的正則運算式后面添加了
\s,因為我們必須匹配產品名稱后面的空格。這可能是一個表格。對于大小,它可以是L或S,前面有或沒有一些X字符。
X{0,3}將匹配“”、“X”、“XX”或“XXX”。你明白這{0,3}意味著“ 0到3次”。然后說它是這個或那個,我們可以使用( | )語法。該組正在捕獲。由于我們不想只捕獲“S”或“L”,我們使用非捕獲組(?: )語法而不是捕獲組。這就是為什么會變成(?:S|L)說“S”或“L”的原因。但由于它只是一個字符而不是單詞,因此[SL]說出其中一個字符會更短。那么它也可以是M(而不是XM),(X{0,3}[LS]|M)$2在更換。
在這里測驗它:https ://regex101.com/r/xHG97U/1
uj5u.com熱心網友回復:
將第一個空格替換為 ? 后跟一個空格,例如:echo "test string 1" | sed 's/ /? /'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427077.html
標籤:正则表达式
