有没有一种优雅的方法来解析单词并在大写字母前添加空格

2024-02-17

我需要解析一些数据并且我想转换

AutomaticTrackingSystem

to

Automatic Tracking System

本质上是在任何大写字母之前放置一个空格(当然除了第一个字母)


您可以使用环视,例如:

string[] tests = {
   "AutomaticTrackingSystem",
   "XMLEditor",
};

Regex r = new Regex(@"(?!^)(?=[A-Z])");
foreach (string test in tests) {
   Console.WriteLine(r.Replace(test, " "));
}

这打印(如 ideone.com 上所示 http://ideone.com/5b0G2):

Automatic Tracking System
X M L Editor

正则表达式(?!^)(?=[A-Z])由两个断言组成:

  • (?!^)- 即我们不在字符串的开头
  • (?=[A-Z])- 即我们就在大写字母之前

相关问题

  • 如何在 Java 中将 CamelCase 转换为人类可读的名称? https://stackoverflow.com/questions/2559759/how-do-i-convert-camelcase-into-human-readable-names-in-java/
  • 正则表达式是如何实现的(?<=#)[^#]+(?=#) work? https://stackoverflow.com/questions/3092797/how-does-the-regular-expression-work/

参考

  • 正则表达式.info/Lookarounds http://www.regular-expressions.info/lookaround.html

平分差价

当您有多个不同的规则和/或您想要时,使用断言确实会产生影响Split代替Replace。此示例结合了两者:

string[] tests = {
   "AutomaticTrackingSystem",
   "XMLEditor",
   "AnXMLAndXSLT2.0Tool",
};

Regex r = new Regex(
   @"  (?<=[A-Z])(?=[A-Z][a-z])    # UC before me, UC lc after me
    |  (?<=[^A-Z])(?=[A-Z])        # Not UC before me, UC after me
    |  (?<=[A-Za-z])(?=[^A-Za-z])  # Letter before me, non letter after me
    ",
   RegexOptions.IgnorePatternWhitespace
);
foreach (string test in tests) {
   foreach (string part in r.Split(test)) {
      Console.Write("[" + part + "]");
   }
   Console.WriteLine();
}

这打印(如 ideone.com 上所示 http://ideone.com/Qw5iC):

[Automatic][Tracking][System]
[XML][Editor]
[An][XML][And][XSLT][2.0][Tool]

相关问题

  • Java split is eating my characters. https://stackoverflow.com/questions/2819933/java-split-is-eating-my-characters/
    • 有许多零宽度匹配断言拆分的示例
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有一种优雅的方法来解析单词并在大写字母前添加空格 的相关文章

随机推荐

  • 如何使用 jQuery / Javascript 运行浏览器命令?

    我有一页 HTML 格式 有两个按钮 保存和打印 当用户单击 打印 时 它应该打印页面并当用户单击 保存 页面时 应打开该页面的 另存为 框 首选 Javascript jQuery 解决方案 对于打印 您可以使用window print
  • 使用对象检测算法进行 SageMaker 托管 Spot 训练

    我正在尝试使用新的托管点训练功能从现有模型开始训练对象检测模型 创建估计器时使用的参数如下 od model sagemaker estimator Estimator get image uri sagemaker Session bot
  • XHTML 合规性毫无意义吗?

    我现在正在构建一个网站 到目前为止 我已经痛苦地强制所有内容都兼容 并且它在浏览器中看起来几乎相同 不过 我开始实现一些第三方 免费的 javascript 它们可以执行添加属性等操作 例如 order 2 我可以解决这个问题 但这很痛苦
  • Python:在巨大的文本中替换单词

    我有一个巨大的文本和一个大约 10K 的单词列表 Python 中用其他单词替换文本中所有单词的最快方法是什么 编辑 文本大小 gt 1Gb 文本是人工编写的 并且 极度标记化 任何字母数字字符和任何其他单个符号都被分割成新的标记 单词数
  • 带节点的 OpenVPN,它是如何工作的?

    我可以使用以下 openVPN 命令轻松从终端连接到 VPN openvpn config conf ovpn 我需要使用 Javascript 连接到同一个 VPN 用于 selenium 测试 我已经安装了openvpn客户端与 NPM
  • 在可访问性方面, 相同吗?

    img src srcpath alt img src srcpath alt 也就是说 这些都被视为图像的空值吗alt文本 或者您必须确保alt 存在 You should使用alt 属性 空 alt 属性的每个示例为图像提供替代文本的规
  • heroku 错误:编译的 slug 大小:对于 Puppeteer 来说太大

    我的应用程序正在本地主机上运行 但是当我在heroku上部署时 puppeteer应用程序需要这个模块https github com jontewks puppeteer heroku buildpack https github com
  • Chrome 历史记录错误可能 - 执行 PRG,并且当再次导航到相同表单时 - 没有添加历史记录条目

    仅在 Chrome 中才会出现奇怪的后退按钮行为 我有两个页面 网格和表单场景 1 当从网格导航到表单时 一切都很好 网格被添加到历史记录中 2 当表单通过post发送到服务器时 我使用RedirectToAction再次重定向 302 到
  • 是否可以通过脚本禁用 Firefox JavaScript JIT?

    我们的网站有一个相当复杂的 JS 应用程序 该应用程序在最新的 Firefox 10 版本中失败 这是由于 JS 解释器中的一个错误导致变量返回 NULL 而实际上它们显然不是这样 此错误仅在 JIT 编译器处于活动状态时发生 而不是在禁用
  • 如何保持用户控件的纵横比?

    有谁知道如何保持 UserControl 的高 宽比 1 1 吗 例如 如果高度 gt 宽度 则宽度和高度将具有相同的尺寸 反之亦然 我不确定这是否有效 但是如果您为SizeChanged http msdn microsoft com e
  • Angular-ui 路由器同时获得两个活动状态

    我需要并行使用两种状态 一种用于我的页面 另一种用于具有多个子状态的模式 现在调用模态状态将清除我的页面 因为页面状态发生了变化 创建我的页面的子状态子级不是解决方案 因为模式将在多个页面上使用 Example stateProvider
  • Flutter - 容器中的顶部对齐文本

    我正在尝试离开 文本位于容器顶部 但即使FractionalOffset 1 0 0 0 the 文本在容器中间继续 可以做什么来离开 在容器的顶部 body new Card child new Column mainAxisSize M
  • 和 'a t 有区别吗?' aria-label='F# 中 t<'a> 和 'a t 有区别吗?'> F# 中 t<'a> 和 'a t 有区别吗?

    之间的含义有什么区别吗t lt a gt and a t在 F 中 即使在声明后它们也可以互换使用吗 没有区别 是的 即使在声明后它们也可以互换使用 但请注意F 组件设计指南 http fsharp org specs component
  • Strope字符编码问题

    我正在开发 XMPP 客户端 并且在发送 接收消息时遇到问题Strophe http strophe im JavaScript 版本 问题是包含 特殊 字符的消息 例如 如果我发送 我在这 外部客户端 即 iChat 将显示 我在这儿 s
  • C++ int a[n] 在 g++ 中工作但不能在 vs2008 中工作

    我有以下代码 int n cin gt gt n int numbers n 它在 Mac 上使用 g 我认为 通过 NetBeans 进行编译 而在 Windows 上则无法使用 VS2008 进行编译 为什么让它适用于每个编译器如此困难
  • SQL Server 2k5内存消耗?

    我有一个正在运行 sql server 的开发虚拟机以及我的堆栈的一些其他应用程序 我发现其他应用程序的性能非常糟糕 经过一番挖掘后 SQL Server 占用了内存 经过快速的网络搜索后 我发现默认情况下 它会消耗尽可能多的内存来缓存数据
  • Java 反射,getMethod()

    我正在研究 Java 反射的基础知识并观察类方法的信息 我需要获取一个与 getMethod 函数所描述的规范相匹配的方法 然而 当我这样做时 我得到一个 NoSuchMethodException 我希望你能告诉我为什么我的实现不正确 s
  • 如何删除旧版 Web 应用程序中的 CSS 意大利面?

    在开发了几个大型 Web 应用程序并看到没有清晰结构的巨大样式表之后 我真的很想知道人们是否找到了方法来保持大型复杂 Web 应用程序的 CSS 干净 如何从遗留的 混乱的 CSS 转向干净的 漂亮的级联 DRY 样式表 我目前正在开发的应
  • 为什么不使用工厂模式进行排序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有没有一种优雅的方法来解析单词并在大写字母前添加空格

    我需要解析一些数据并且我想转换 AutomaticTrackingSystem to Automatic Tracking System 本质上是在任何大写字母之前放置一个空格 当然除了第一个字母 您可以使用环视 例如 string tes