在R stringr中第n次出现后匹配

时间:2019-03-29 00:40:28

标签: r regex stringr

如何匹配第n个管道与第n + 1个管道之间的事物?

在字符串abc|def|ghi|jkl中,我想匹配ghi

我最好的尝试是

str_match_all('abc|def|ghi|jkl', '((?<=\\|)[^|]*)')[2,1]

但这有点效率低下,因为它比我需要的匹配更多,然后在R中将其削减到第二个匹配。我想知道正则表达式是否有更多本机可以只参加第n个比赛。

2 个答案:

答案 0 :(得分:1)

您可以使用

EntityA

请参见regex demoEntityB 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 demostr_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>