【问题标题】:Regular expression is not working as expected正则表达式未按预期工作
【发布时间】:2014-04-28 04:31:44
【问题描述】:

有人可以帮我做正则表达式吗?我真的很挣扎。

基本上我想写一个正则表达式来将字符串分成两个子字符串。

例如,在示例中,我想将完整的字符串分成"comp99810_c0_seq1" and "|m.8409"。

test <- "comp99810_c0_seq1|m.8409" 
c1 <- sub("([A-Za-z1-9])(\\|)(m.\\d+)", "\\1", test) 
c2 <- sub("([A-Za-z1-9])(\\|)(m.\\d+)", "\\2\\3", test) 

我能够让 c1 工作,但不能让 c2 工作。谁能帮帮我……

谢谢 乌彭德拉

【问题讨论】:

  • 这是什么编程语言?它不是有一个split 函数可以用来分割| 吗?
  • 什么是分隔符?只是|?双方的预期模式是什么?
  • 定义“不起作用”您使用的是相同的正则表达式,一个“不起作用”怎么办?另外,您使用的是什么宿主语言?看起来像 R?
  • Regex group capture in R 的可能重复项

标签: regex


【解决方案1】:

如果您不想在“\|”上拆分,问题是第一组缺少重复字符。即 ([A-Za-z1-9])+ 或 ([A-Za-z1-9])*。因为现在它只匹配该集中的单个字符,然后尝试查找管道。

【讨论】:

  • 我不想拆分基于 n "|"因为我仍然想将其保留在捕获的组中。
【解决方案2】:

尝试使用与您当前使用的语言类似的split("|") 函数。

但是,将[A-Za-z1-9] 更改为\\w+ 即可。

目前您的正则表达式仅表示一个字符。而\\w+ 表示来自a-zA-Z、0-9、_ 的1 个或多个字符

【讨论】:

  • 我这样做了,但它确实有效...c1 &lt;- sub("(\\w+\\d+)(\\|)(m.\\d+)", "\\1", test) 和 c2 &lt;- sub("(\\w+\\d+)(\\|)(m.\\d+)", "\\2\\3", test)。不过感谢您的提示...
  • \\d+ 在输入类似于comp99810_c0_seq|m.8409 时会伤害您。现在试试!然后删除\\d+,然后重试:-)
  • 你是对的。尽管我只有那种既有单词又有数字的那种,\\d+ 可以工作,但我不需要它。再次感谢..
猜你喜欢
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
相关资源
最近更新 更多