【问题标题】:First word and first letter of last word of string with Regex使用正则表达式的字符串的最后一个单词的第一个单词和第一个字母
【发布时间】:2012-11-21 20:57:56
【问题描述】:

我想使用第三方工具将大量文件批量导入 SharePoint 并将它们与用户相关联。它需要一个正则表达式来进行文件名和帐户名之间的转换。

我们的文件格式为firstname surnamefirstname middlename surname。 我们的帐户名称格式为firstname,然后是first inital of the surname

为了说明:

foo bar -> foob
foo bar qux -> fooq

在搜索时,我确实找到了一些获取遗言的第一个字母的示例,但它们都在代码中结合了正则表达式使用了函数,但在这种情况下我无法使用。单独使用正则表达式可以做到这一点吗?

【问题讨论】:

  • 一方面它取决于第三方工具如何使用匹配项。它可能需要第一个,或者连接所有匹配项或其他任何内容......即使它连接所有匹配项(我认为它是您需要的选项)我不确定它是否可能。

标签: regex


【解决方案1】:

你可以试试这个:

^([a-zA-Z]+).*\s([a-zA-Z])[a-zA-Z]+$

here on Regexr

您会在第一个捕获组中找到名字,通常称为$1,在$2 中找到姓氏的第一个字符

如果名称仅由字母 a-z 或 A-Z 组成,这将起作用。为了给你一个更好的答案,你需要给出你的名字的规格和你使用的工具。

【讨论】:

  • 这匹配整个字符串。
  • 感谢您的快速回复。我不太在意具有不寻常字符的特殊情况,因为如果需要,可以手动整理它们。只要他们中的大部分工作。如何在接受正则表达式的单个字段中返回两个捕获组的内容?
  • @Diego,为什么?默认情况下,点不匹配换行符。我不知道他是如何获得这些信息的,我假设文件是​​逐行读取的,那么我的解决方案很好,如果他获得了完整的文件内容,那么我需要启用multiline 模式m,但是它仍然不匹配整个字符串。
  • 作为参考,这是该工具的主页:spc3.codeplex.com/…
  • 取决于工具用于替换的内容,它可能是 \1\2$1$2
【解决方案2】:

试试这个(Perl 风格):

s/(\w+).*?\s(\w)(\w+)$/$1$2/

【讨论】:

    【解决方案3】:

    用这个模式匹配每个文件名:

    ^(\w+)\s+(\w+\s+)?(\w)\w*$
    

    并将匹配的字符串替换为以下模式以生成帐户名称:

    $1$3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2022-06-15
      • 1970-01-01
      • 2021-11-30
      相关资源
      最近更新 更多