当前位置: 首页 > 知识库问答 >
问题:

正则表达式将字符替换为字符本身和连字符

濮阳鸿卓
2023-03-14

我需要用骆驼大小写字符和 - 替换一些驼峰大小写字符。

我得到的是这样一个字符串:

Albert-Weisgerber-Allee 35
Bruninieku iela 50-10

这些字符串通过正则表达式将数字与街道分开:

$data = preg_replace("/[^ \w]+/", '', $data);
$pcre = '\A\s*(.*?)\s*\x2f?(\pN+\s*[a-zA-Z]?(?:\s*[-\x2f\pP]\s*\pN+\s*[a-zA-Z]?)*)\s*\z/ux';
preg_match($pcre, $data, $h);

现在,我有两个问题。

>

  • 我非常不擅长正则表达式。

    上面的regex还删除了街道名称中的每一个-,在德国和欧洲有很多这样的名称。

    实际上,调整正则表达式以不剪切任何连字符非常容易,但我想了解正则表达式的工作原理,因此我决定尝试找到一个正则表达式,它只是替换字符串中的每个骆驼大小写字母

    - & matched Camel Case letter
    

    除了第一个大写字母出现之外。

    我已经设法找到一个正则表达式,它显示了我需要粘贴连字符的地方,如下所示:

    .[A-Z]{1}/ug     
    

    https://regex101.com/r/qI2iA9/1

    但是我到底要怎么替换这个字符串呢:

    AlbertWeisgerberAllee 
    

    它变成了

    Albert-Weisgerber-Allee
    
  • 共有3个答案

    董弘新
    2023-03-14

    你的表情似乎过于复杂了。您可以使用以下命令将-放在除第一个字母以外的任何大写字母之前:

    (.)(?=[A-Z])
    

    只需将其替换为1 Dollar-。本质上,这个正则表达式的作用是:

    1. (.)查找任意字符并将该字符放在组1中。
    2. (?=[A-Z])查看后面是否有大写字符。
    3. 1 Dollar-如果匹配,请替换为组1中找到的字符,后跟连字符。
    濮献
    2023-03-14

    只需使用捕获组:

    (.)([A-Z])        //removed {1} because [A-Z] implicitly matches {1}
    

    并替换为< code>$1-$2

    参见https://regex101.com/r/qI2iA9/3

    廖鸿达
    2023-03-14

    要在大写之前插入破折号,请使用此正则表达式

    $string="AlbertWeisgerberAllee";
    $string=preg_replace("/([a-z])([A-Z])/", "\\1-\\2", $string);
    
     类似资料:
    • 问题内容: 我正在尝试使用正则表达式替换字符串中所有出现的英国汽车登记信息。 当字符串与以下正则表达式完全匹配时,以下swift代码可完美地用于a。 结果是 但是,以下操作无效,并且字符串未修改 结果是 谁能给我任何指示? 问题答案: 您需要删除和锚点。 该装置 开始字符串 和手段 结束字符串 (或行,这取决于选项)。这就是第一个示例起作用的原因:在第一个测试字符串中,字符串的开头实际上是您的模式

    • 我有一根绳子: 我想将所有字符(#,)替换为(#),因此例外的输出是: 注意:我不知道字符串中有多少(#)或(#)序列 我尝试的是: 我试着写: 但结果是: 我的在线尝试 我尝试将(*)用于序列,但没有成功: 那么我如何才能得到我的例外输出?

    • 问题内容: 我有以下几种可能的形式的字符串: 我希望能够将它正则化为,基本上替换和之间的所有内容。我试过了: 但这是行不通的。任何帮助表示赞赏。 PS 表示有一个换行符用于此目的。实际上不在那里。 问题答案: 您可以使用 并替换为。请参阅在线Go regex演示。 在这里,匹配并捕获子字符串(它将从替换模式中引用此值),并将匹配并消耗除换行符以外的任何0+字符,直至行尾。 参见Go演示: 输出:

    • 本文向大家介绍正则表达式的字符串替换方法,包括了正则表达式的字符串替换方法的使用技巧和注意事项,需要的朋友参考一下 我有以下几行: d:\Projects\qqq\Development\qqq.MySol1.sln d:\Projects\qqq\qqqDevelopment\qqqMySol2.sln d:\Projects\qqq\Development\MyInstaller.sln d:

    • 我想使用Gson将字符串转换为Foo对象: 下面是我的正则表达式: 如何使用此正则表达式将所有,.和替换为,,而不更改JSON中的键和值?

    • 我想匹配任何文本中的某些行,在匹配中,我想尽可能频繁地替换某个字符。示例文本: 任何文本和“更多”文本。不要在此处替换引号 CatchThis(此处没有引号,“任何更多文本”,“等等…”)。。。 现在,我想用哈希符号来替换圆括号中的每个引号。预期结果: 任何文本和“更多”文本。不要在此处替换引号 CatchThis(此处没有引号,#没有更多文本#,#等等…#)。。。 匹配线条很容易。这是我的模式: