我正在尝试使用正则表达式删除两个|
分隔符之前和之后的所有内容。
一个例子是:
EM|CX-001|Test Campaign Name
并获取除CX-001
以外的所有内容。我不能使用子字符串,因为管道前后的字符数可能会更改。
我尝试使用正则表达式(?<=\|)(.*?)(?=\-)
,但是虽然选择了CX-001
,但我需要选择除此以外的所有内容。
如何解决此问题?
答案 0 :(得分:1)
^[^|]*\|([^|]+).+$
$1
答案 1 :(得分:1)
如果字符串中只有2个管道,则可以匹配第一个管道,也可以从最后一个管道匹配到字符串的结尾:
SpreadsheetApp.getUi()
.createMenu('Custom Menu')
.addItem('Show alert', 'showAlert')
.addToUi();
}
function AskUser() {
var ui = SpreadsheetApp.getUi();
var result = ui.alert(
'Worksheet Protected!',
'Do you want to unprotect the worksheet?',
ui.ButtonSet.YES_NO);
if (result == ui.Button.YES) {
//This is where I want the password dialogue box prompt
ui.alert('The worksheet will be unprotected after you submit the right password.');
} else {
ui.alert('The worksheet will not be unprotected.');
}
}
说明
^.*?\||\|.*$
从字符串非贪婪开始到第一个管道匹配^.*?\|
或|
从最后一个管道匹配到字符串结尾或者您也可以使用否定的字符类\|.*$
而不需要捕获组:
[^|]*
注意
在您的模式^[^|]*\||\|[^|]*$
中,我想表示的是,如果要在2个管道之间进行选择,则最后一个正向提前应为(?<=\|)(.*?)(?=\-)
而不是(?=\|)
。
答案 2 :(得分:0)
您可以尝试以下正则表达式:
(^[^|]*\|)|(\|[^|]*$)
String input = "EM|CX-001|Test Campaign Name";
System.out.println(
input.replaceAll("(^[^|]*\\|)|(\\|[^|]*$)", "")
); // prints "CX-001"
正则表达式的解释:
NODE EXPLANATION
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
[^|]* any character except: '|' (0 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
\| '|'
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
( group and capture to \2:
--------------------------------------------------------------------------------
\| '|'
--------------------------------------------------------------------------------
[^|]* any character except: '|' (0 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
$ before an optional \n, and the end of
the string
--------------------------------------------------------------------------------
) end of \2