如何匹配第n个管道与第n + 1个管道之间的事物?
在字符串abc|def|ghi|jkl
中,我想匹配ghi
。
我最好的尝试是
str_match_all('abc|def|ghi|jkl', '((?<=\\|)[^|]*)')[2,1]
但这有点效率低下,因为它比我需要的匹配更多,然后在R中将其削减到第二个匹配。我想知道正则表达式是否有更多本机可以只参加第n个比赛。
答案 0 :(得分:1)
您可以使用
EntityA
请参见regex demo(EntityB entityB = new EntityB();
dbContext.EntityBs.Add(entityB);
EntityA entityA = new EntityA();
entityA.EntityBId = entityB.EntityBId; // <-- assign `ForeignKey` value instead of navigation property value, hence no required validation error will occur
dbContext.EntityAs.Add(entityA);
dbContext.SaveChanges();
/ str_extract(x, "(?<=\\|)[^|]+(?=\\|[^|]+$)")
regmatches(x, regexpr("(?<=\\|)[^|]+(?=\\|[^|]+$)", x, perl=TRUE))
sub(".*\\|([^|]+)\\|[^|]+$", "\\1", x)
)和another demo(str_match
)。
详细信息
regmatches
-确保当前位置的左侧紧邻有一个sub
字符(?<=\\|)
-除|
之外的一个或多个字符[^|]+
-当前位置的右边,必须有一个|
字符,然后是(?=\\|[^|]+$)
以外的任何0+字符,然后是字符串的结尾。R:
|
答案 1 :(得分:0)
您是否正在寻找类似的东西?应该捕获管道之间的所有内容。
<!DOCTYPE html>
<html>
<body>
<div id="webchat" />
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script src="https://unpkg.com/react@16.5.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.5.0/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/react-redux@5.0.7/dist/react-redux.min.js"></script>
<script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
<script>
function uploadFile() {
document.querySelector('[title="Upload file"]').click();
}
</script>
<script type="text/babel">
var chatbot = new WebChat.createDirectLine({
token: 'YourToken',
webSocket: true,
});
const attachmentMiddleware = () => next => card => {
switch (card.attachment.contentType) {
case 'application/uploadAttachment':
return (<button type="button" onClick={uploadFile}>Upload file</button>);
default:
return next(card);
}
};
WebChat.renderWebChat({
directLine: chatbot,
botAvatarInitials: 'Bot',
attachmentMiddleware,
}, document.getElementById('webchat'));
</script>
</body>
</html>