我想清理最后可能包含垃圾的字串,總是用正斜杠 / 分隔,如果沒有垃圾,就沒有分隔符。
示例 > 預期輸出
Foo/Bar > Foo
Foobar > Foobar
我嘗試了幾個像這樣的版本來僅提取有效載荷,沒有一個有效:
(.*)\/.*
(.*)?\/.*
(.*)?\/*.*
等等。問題是:我總是只得到第一行或第二行匹配。
提取所需資訊的正確表達是什么?
uj5u.com熱心網友回復:
您的第一個和第二個模式捕獲到第一個之前,/因此不會匹配第三行,因為沒有/存在。
第三個模式匹配整行,因為/*匹配一個可選的正斜杠,所以捕獲組將匹配整行,并且.*不再匹配任何字符,因為捕獲組已經在行尾。
您可以使用包含 1 個或多個單詞字符的捕獲組撰寫模式作為第一部分,以及可選的第二部分,從匹配/到字串結尾開始匹配。
在替換中,您可以使用第一個捕獲組。
^(\w )(?:\/.*)?$
^字串的開始(\w )捕獲第 1 組中的 1 個單詞字符(?:\/.*)?可選匹配/和其余的行(替換后將被洗掉)$字串結束
請參閱正則運算式演示。
沒有列出語言,但有一個使用 JavaScript 的例子:
const regex = /^(\w )(?:\/.*)?$/m;
const str = `Foo/Bar
Foobar`;
const result = str.replace(regex, "$1");
console.log(result);
使用 Python 的示例
import re
regex = r"^(\w )(?:\/.*)?$"
test_str = ("Foo/Bar\n"
"Foobar")
result = re.sub(regex, r'\1', test_str, 0, re.MULTILINE)
if result:
print (result)
輸出
Foo
Foobar
Python 演示
uj5u.com熱心網友回復:
您可以replace在這里使用:
const cleanString = (str) => str.replace(/\/.*/, "");
console.log(cleanString("Foo/Bar"));
console.log(cleanString("Foobar"));
uj5u.com熱心網友回復:
此任務不需要正則運算式的強大功能,您需要在第一個斜杠上拆分,例如在 Python 中:
test_string.split('/', 1)[0]
我認為您的正則運算式不起作用的原因是Foobar沒有/匹配項。因此,對于正則運算式,您需要處理一個、一個或多個斜杠。再次,在 Python 中:
>>> test = ['foobar', 'foo/bar', 'foo/bar/baz']
>>> for s in t:
print(re.findall('^(.*?)(?=/|$)', s))
['foobar']
['foo']
['foo']
正則運算式說:從字串的開頭,將所有字符(非貪婪的)分組到斜杠或字串的結尾。
uj5u.com熱心網友回復:
您可以嘗試在 / 上執行 regex.split 并從串列中選擇第一個元素。例如在python中:
將正則運算式匯入為 re
new_string = re.split('/',string)[0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358679.html
標籤:正则表达式
