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

将记事本正则表达式转换为。净C#

易炳
2023-03-14

使用管道分隔的文件。目前,我使用记事本查找和替换REGEX模式^(?:[^|]*\|){5}\K[^|]*,它用第5和第6个|之间的空字符串替换所有行。我正在尝试以编程方式执行此过程,但是。NET不支持\K。我尝试了一些向后查找实例,但似乎无法理解它。

string[] lines = File.ReadAllLines(path);
foreach (string line in lines)
{
    string line2 = null;
    string finalLine = line;
    string[] col = line.Split('|');
    if (col[5] != null)
    {
        line2 = Regex.Replace(line, @"^(?:[^|]*\|){5}\K[^|]*", "");

共有2个答案

时向文
2023-03-14

无需使用lookbehinds,使用捕获组和反向引用:

line2 = Regex.Replace(line, @"^((?:[^|]*\|){5})[^|]*", "$1");

参见证明。

解释

--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    (?:                      group, but do not capture (5 times):
--------------------------------------------------------------------------------
      [^|]*                    any character except: '|' (0 or more
                               times (matching the most amount
                               possible))
--------------------------------------------------------------------------------
      \|                       '|'
--------------------------------------------------------------------------------
    ){5}                     end of grouping
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  [^|]*                    any character except: '|' (0 or more times
                           (matching the most amount possible))
华锦程
2023-03-14

K是正则表达式语法/引擎的“变通方法”,不支持针对查找后断言的锚定。

. NET的正则表达式语法具有后视断言(使用语法(?

Regex.Replace(line, @"(?<=^(?:[^|]*\|){5})[^|]*", "")

在的上下文中。NET中,该模式现在描述:

(?<=               # begin (positive) look-behind assertion
    ^              # match start of string
    (?:            # begin non-capturing group
       [^|]*\|     # match (optional) field value + delimiter
    ){5}           # end of group, repeat 5 times
)                  # end of look-behind assertion
[^|]*              # match any non-delimiters (will only occur where the lookbehind is satisfied)

 类似资料:
  • 我试图将js代码转换为java版本,但对正则表达式有点困惑:在js中,我有一个类似于:testString的表达式。拆分(“/(\w*\d)/g”) 我可以在java中使用什么等效语言?我试着用匹配器得到同样的结果。find()和split函数,但结果不一样。

  • 问题内容: 我目前正在将Web应用程序代码从PHP移植到JS。 我对此正则表达式有疑问。从PHP 这样使用 如何将其转换为在JS上工作? 先感谢您 问题答案: 没什么特别的。PHP regex语法与JavaScript中的语法非常相似: 您可以从 MDN的 本手册中找到有关JavaScript 中正 则表达式的更多信息:https : //developer.mozilla.org/en- US/

  • 问题内容: 我知道regEx在各种语言中都很常见…但是我在编写Java语法时遇到了麻烦。我有一个用JS编码的正则表达式; 如何用Java编写相同的代码? 我已经进口了 只是要补充一点,根据我的尝试,它说\ x是无效的转义字符。 问题答案: 将开头和结尾字符更改为,然后将其替换为。 与JavaScript,Perl和其他脚本语言不同,Java对正则表达式没有特殊的语法。相反,它们(通常)使用Java

  • 我正在尝试查找并删除在Notepad++中有“no data”作为数据的表行。可能是一个更好的方法,但记事本++是必须在这里。值可以是任何字符串。所有的表(每个tr标签)都在一行(可能有些导出问题),我发现很难删除它们。为了更好地演示(也许,希望如此),我把它们分开了。 后接 所以除了th字符串之外,每个tr中的一切都是一样的。我试过这样的方法,但没有奏效: 审判 非常感谢您的帮助!:)

  • 问题内容: 您如何将该Perl正则表达式转换为Java? 编译时,对我而言它不匹配“ PattErn”,但失败 问题答案: 您如何将该Perl正则表达式转换为Java? 你不能 造成这种情况的原因很多。这里有一些: Java不像Perl那样支持正则表达式语言。它缺少字形支持(如和完整属性支持(如),缺少Unicode命名字符,没有分支重置运算符,在Java 7之前没有命名捕获组或逻辑转义,没有递归

  • 问题内容: 我明白了为什么使用正则表达式的字符串转换一样没有给出所需的输出到这反而给了。我可以用String.substring做一些事情,或者只是替换最后一个字符,但是我认为有一种更好的解决方案。 这是代码: 问题:正在寻找一种更整洁的方式来获得所需的输出? 问题答案: 看到这个问题,从番石榴 就您而言,类似: