天道酬勤,学无止境

正则表达式查找具有特定数量参数的方法调用(regex find method calls with specific number of arguments)

问题

我试图找到某些方法的所有发生,但只有指定数量的参数(5):

所以假设我有不同的方法,它们具有相同的名称和不同的参数集。

.method(asd,asd,asd,asd,asd,asd,asd)
.method(asd,asd,asd,asd,asd)
.method(asd,asd,asd)

我尝试过类似的方法: \.open\((?:.*?\,){4}[^,]*?\)但它会返回所有带有 5 个或更多参数的方法:

.method(asd,asd,asd,asd,asd,asd,asd)
.method(asd,asd,asd,asd,asd)

我只需要那些有 4 的人。提前谢谢!

回答1

为我工作:

egrep "\(([^,]*,){4}[^,]*\)"  method

评论建议:

egrep "open\s?\(([^,)]*,){4}[^,)]*\)"  methodfile
回答2

尝试这样的事情:

\.method\(\w+(,\w+){3}\)

只返回正好有 4 个参数的那些。 您可能需要考虑可选的空格字符:

\.method\s*\(\s*\w+(\s*,\s*\w+\s*){3}\)

编辑

由于您使用 Eclipse 标记了您的问题,我假设您熟悉 Java。 下列:

import java.util.regex.*;

class Test {
  public static void main(String[] args) {
    String text = ".method(asd,asd,asd,asd,asd,asd,asd) \n" +
        ".method(asd,asd,asd,asd)                       \n" +
        ".method(asd,asd,asd)                           \n" +
        "Foo.method(a,b,c,d)                            \n";

    Matcher m = Pattern.compile("\\.method\\(\\w+(,\\w+){3}\\)").matcher(text);

    while(m.find()) {
      System.out.println(m.group());
    }
  }
}

产生输出:

.method(asd,asd,asd,asd)
.method(a,b,c,d)

正如您在 Ideone 上看到的那样:http://ideone.com/RvTxw

高温高压

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Regex.IsMatch 方法正则表达式在输入字符串中是否找到匹配项C#
    Regex.IsMatch 方法 定义 命名空间: System.Text.RegularExpressions 程序集: System.Text.RegularExpressions.dll, System.dll, netstandard.dll 指示正则表达式在输入字符串中是否找到匹配项。 重载 IsMatch(String) 指示 Regex 构造函数中指定的正则表达式在指定的输入字符串中是否找到了匹配项。 IsMatch(String, Int32) 指示 Regex 构造函数中指定的正则表达式在指定的输入字符串中,从该字符串中的指定起始位置开始是否找到了匹配项。 IsMatch(String, String) 指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项。 IsMatch(String, String, RegexOptions) 指示所指定的正则表达式是否使用指定的匹配选项在指定的输入字符串中找到了匹配项。 IsMatch(String, String, RegexOptions, TimeSpan) 指示所指定的正则表达式是否使用指定的匹配选项和超时间隔在指定的输入字符串中找到了匹配项。 IsMatch(String) 指示 Regex 构造函数中指定的正则表达式在指定的输入字符串中是否找到了匹配项。 C#复制 public bool IsMatch
  • 使用正则表达式查找包含特定方法或变量的函数(Using Regex to find function containing a specific method or variable)
    问题 这是我在stackoverflow上的第一篇文章,所以请对我温柔... 我仍在学习正则表达式 - 主要是因为我终于发现它们有多么有用,这部分是通过使用 Sublime Text 2。所以这是 Perl 正则表达式(我相信) 我已经在这个网站和其他网站上搜索过,但我现在真的被困住了。 也许我正在尝试做一些无法完成的事情 我想找到一个正则表达式(模式),它可以让我找到包含给定变量或方法调用的函数、方法或过程等。 我尝试了许多表达式,它们似乎是部分方式,但不是全部方式。 特别是在 Javascript 中搜索时,我选择了多个函数声明,而不是最接近我要查找的调用/变量的函数声明。 例如:我正在寻找调用我学到的方法 save data() 的函数,从这个我可以使用 (?s) 切换的优秀站点。 包括换行符 function.*(?=(?s).*?savedata\(\)) 但是,这将找到 word 函数的第一个实例,然后找到所有文本,包括 savedata() 如果有多个过程,那么它将从下一个函数开始并重复,直到再次到达 savedata() function(?s).*?savedata\(\) does something similar 我试图通过使用以下内容来要求它忽略第二个函数(我相信): function(?s).*?(?:(?!function).*?)*savedata\
  • 使用Python的re.compile是否值得?(Is it worth using Python's re.compile?)
    问题 在Python中对正则表达式使用compile有什么好处? h = re.compile('hello') h.match('hello world') 与 re.match('hello', 'hello world') 回答1 与动态编译相比,我有1000多次运行已编译的正则表达式的经验,并且没有注意到任何可察觉的差异。 显然,这是轶事,当然也不是反对编译的一个很好的论据,但我发现两者之间的差别可以忽略不计。 编辑:快速浏览了实际的Python 2.5库代码后,我发现无论何时使用Python(包括对re.match()调用),Python都会在内部编译和缓存正则表达式,因此您实际上只是在更改正则表达式时编译,并且不应节省太多时间-只是节省检查缓存的时间(对内部dict类型的键查找)。 从模块re.py(评论是我的): def match(pattern, string, flags=0): return _compile(pattern, flags).match(string) def _compile(*key): # Does cache check at top of function cachekey = (type(key[0]),) + key p = _cache.get(cachekey) if p is not None: return p #
  • 用Javascript中的大写替换正则表达式捕获组(Replace a Regex capture group with uppercase in Javascript)
    问题 我想知道如何用JavaScript中的大写字母替换捕获组。 这是到目前为止我没有尝试过的工作的简化版本: > a="foobar" 'foobar' > a.replace( /(f)/, "$1".toUpperCase() ) 'foobar' > a.replace( /(f)/, String.prototype.toUpperCase.apply("$1") ) 'foobar' 您能解释一下这段代码有什么问题吗? 回答1 您可以传递一个函数来replace 。 var r = a.replace(/(f)/, function(v) { return v.toUpperCase(); }); 解释 a.replace( /(f)/, "$1".toUpperCase()) 在此示例中,您将字符串传递给replace函数。 由于您使用的是特殊的替换语法($ N捕获第N个捕获),因此您只是赋予了相同的值。 toUpperCase实际上是在欺骗,因为您仅使替换字符串为大写(这是毫无意义的,因为$和一个1字符没有大写,因此返回值仍为"$1" ) 。 a.replace( /(f)/, String.prototype.toUpperCase.apply("$1")) 信不信由你,这个表达的语义是完全一样的。 回答2 我知道我参加晚会很晚,但是这是一种较短的方法
  • 如何使用正则表达式匹配方法块?(How to match a method block using regex?)
    问题 举个例子。 public static FieldsConfig getFieldsConfig(){ if(xxx) { sssss; } return; } 我写了一个正则表达式, "\\s*public\\s*static.*getFieldsConfig\\(.*\\)\\s*\\{" 它只能匹配第一行。 但是如何正确匹配方法的最后一个“}”? 帮我。 谢谢。 编辑:未指定方法 {} 的内容。 但是模式肯定是这样的, public static xxx theKnownMethodName(xxxx) { xxxxxxx } 回答1 我决定更进一步;) 这是一个正则表达式,它将为您提供不同捕获组中函数的修饰符、类型、名称和主体: ((?:(?:public|private|protected|static|final|abstract|synchronized|volatile)\s+)*) \s*(\w+)\s*(\w+)\(.*?\)\s*({(?:{[^{}]*}|.)*?}) 它处理嵌套大括号(@callOfCode,它是(半)可能的正则表达式;)和一组固定的修饰符。 它不处理复杂的东西,比如注释中的大括号之类的东西,但它适用于最简单的东西。 问候 Regex101 示例在这里 编辑:并回答您的问题;),您感兴趣的是捕获组 4。 编辑 2:正如我所说 -简单的
  • 递归查找具有特定扩展名的文件(Recursively find files with a specific extension)
    问题 我正在尝试查找具有特定扩展名的文件。 例如,我想查找所有名为 Robert 的 .pdf 和 .jpg 文件 我知道我可以执行此命令 $ find . -name '*.h' -o -name '*.cpp' 但除了扩展名之外,我还需要指定文件本身的名称。 我只是想看看是否有可能避免一遍又一遍地写入文件名谢谢! 回答1 我的偏好: find . -name '*.jpg' -o -name '*.png' -print | grep Robert 回答2 使用find的-regex参数: find . -regex '.*/Robert\.\(h\|cpp\)$' 或者只是使用-name : find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \) 回答3 find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \) -o代表OR条件,您可以在大括号内添加任意数量的内容。 因此,这表示要查找名称中任何位置包含“Robert”一词且名称以“pdf”或“jpg”结尾的所有文件。 回答4 作为在find上使用-regex选项的替代方法,由于问题被标记为 bash,您可以使用大括号扩展机制: eval find . -false "-o -name Robert"
  • 正则表达式在所有文件的函数调用中查找/替换参数模式(Regex to Find/replace argument pattern in a function-call across all files)
    问题 我有一个很大的代码库,我们需要在其中对特定函数的参数进行模式更改。 即函数foo()所有参数都从格式something.anotherThing重命名为something_anotherThing 参数可以是任何东西,但总是采用 str1.str2 格式。 仅针对此函数的参数执行此操作,所有其他代码应保持不变。 例如 foo(ax) --> foo(a_x) foo(a4.b6) --> foo(a4_b6) 有什么方法可以使用正则表达式或工具来实现它,我可以在其中一步完成所有文件的一个特定功能吗? 回答1 如果函数只有一个参数,那就很容易了: 使用能够在多个文件中搜索和替换的工具,例如。 文本爬虫。 然后选择正则表达式选项卡并填写: 正则表达式: (foo\([^)]+)(\.)([^)]+\)) 代替: $1_$3 如果函数中有更多参数,这将不起作用。 但是您可以一次又一次地单击“替换”按钮,直到它说没有找到结果。 您必须最多执行 n 次,其中 n = 任何函数中的最大参数数。
  • 用于查找 C# 类和方法名称的正则表达式(Regular Expressions to find C# class and method names)
    问题 我正在编写一个影响分析工具,它将解析一堆选定的文件类型并找到文件中的类和方法调用(在本例中为 .cs 文件)。 我已经设法编写了一个正则表达式,它会发现一行代码是否是一个方法调用。 Regex re = new Regex( @"\b(public|private|internal|protected)\s*" + "(static|virtual|abstract)?\s*[a-zA-Z]*\s[a-zA-Z]+\s*" + "\((([a-zA-Z\[\]\<\>]*\s*[a-zA-Z]*\s*)[,]?\s*)+\)"); 然而; 我不知道如何从正则表达式中获取方法名称。 它将一行识别为匹配,但我如何提取实际的方法名称。 对此的任何帮助将是惊人的。 此外; 我不确定这是否是实际完成的方式,但是是否有任何其他(最新的)c# 文件解析器能够为我提供文件中的方法名称和类名称列表? 回答1 您可以将代表方法的部分放入一个组中,如下所示: (?<method>[a-zA-Z]+) 然后你可以像这样访问它: Match match = regex.Match(line); if (match.Success) { string method = match.Groups["method"].Value; } 但是,您目前的正则表达式在匹配方法名称方面存在各种问题: 它不处理泛型
  • 使用 Ruby Regex 以特定格式查找每个文件的多个 Objective-C 注释(Find multiple Objective-C comments per file, in certain format, with Ruby Regex)
    问题 我正在编写一个 Ruby 脚本,它使用正则表达式在 Objective-C 源代码文件中查找特定格式的所有注释。 格式是 /* <Headline_in_caps> <#>: <Comment body> **/ 我想以大写形式捕获标题、评论的数量和正文。 使用下面的正则表达式,我可以在更大的文本正文中找到这种格式的一条评论。 我的问题是,如果文件中有多个注释,那么我最终会得到第一个/*和最后一个**/之间的所有文本,包括代码。 我不希望它包含所有文本,而只包含每个/*和**/ 。 注释的正文可以包含所有字符,除了**/和*/都表示注释的结束。 假设正则表达式会找到多个完整的正则表达式匹配只处理一次文本,我是否正确? \/\*\s*([A-Z]+). (\d)\:([\w\d\D\W]+)\*{2}\//x 拆分正则表达式执行以下操作: \/\*查找注释的开头 \s*查找空格 ([AZ]+)捕获大写单词 .<space> — 找到大写单词和数字之间的空格 (\d)捕获数字 \: — 找到冒号 ([\w\W\d\D]+)捕获可以包含所有有效字符的消息正文,除了**/或*/ \*{2}\/找到评论的结尾 这是一个示例,从第一个/*到第二个**/被捕获。: /* HEADLINE 1: Comment body. **/ - (BOOL)application
  • Java中的正则表达式
    简介 正则表达式,又称规则表达式。代码中常简写为regex、regexp。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 目的 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。可以通过正则表达式,从字符串中获取我们想要的特定部分(“提取”)。 常见规则 A:字符 x   字符 x。举例:'a’表示字符a\\   反斜线字符\n  换行符 (’\u000A’)\r   回车符 (’\u000D’) B:单字符类 [abc]    a、b、c 中的一个字符[^abc]   任何字符,除了 a、b 或 c(否定)[a-zA-Z]  a到 z 或 A到 Z,两头的字母包括在内(范围)[0-9]    0到9的字符都包括 C:预定义字符类 .   任何字符\d  数字:[0-9]\w  单词字符:[a-zA-Z_0-9] 在正则表达式里面组成单词的东西必须有这些东西组成 D:边界匹配器 ^   行的开头$   行的结尾\b  单词边界 就是不是单词字符的地方。举例:hello world?haha;xixi E:Greedy 数量词 X?    X出现一次或一次也没有X*   
  • 检查文件中是否存在所有多个字符串或正则表达式(Check if all of multiple strings or regexes exist in a file)
    问题 我想检查我的所有字符串是否都存在于文本文件中。 它们可以存在于同一行或不同行。 并且部分匹配应该可以。 像这样: ... string1 ... string2 ... string3 ... string1 string2 ... string1 string2 string3 ... string3 string1 string2 ... string2 string3 ... and so on 在上面的示例中,我们可以用正则表达式代替字符串。 例如,以下代码检查文件中是否存在我的任何字符串: if grep -EFq "string1|string2|string3" file; then # there is at least one match fi 如何检查它们是否全部存在? 因为我们只是对所有匹配项的存在感兴趣,所以我们应该在所有字符串都匹配后立即停止读取文件。 是否可以不必多次调用grep (在输入文件很大时,或者如果我们有大量匹配的字符串时就不会缩放)或使用awk或python类的工具来执行此操作? 另外,是否有可以轻松扩展为正则表达式的字符串的解决方案? 回答1 Awk是发明grep,shell等的人发明的工具,可以执行这种通用的文本处理工作,因此不确定为什么要避免使用它。 如果简洁是您想要的,以下是GNU awk的一线内容,可满足您的要求: awk
  • 如何在Linux上查找所有包含特定文本的文件?(How do I find all files containing specific text on Linux?)
    问题 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么您的答案正确的解释。 答案不够详细的答案可能会被编辑或删除。 我正在尝试寻找一种方法来扫描我的整个Linux系统,以查找包含特定文本字符串的所有文件。 只是为了澄清,我正在文件中寻找文本,而不是在文件名中寻找文本。 当我查找如何执行此操作时,我两次遇到此解决方案: find / -type f -exec grep -H 'text-to-find-here' {} \; 但是,它不起作用。 似乎显示了系统中的每个文件。 这接近正确的方法吗? 如果没有,我应该怎么办? 在文件中查找文本字符串的功能对于我正在做的某些编程项目非常有用。 回答1 请执行下列操作: grep -rnw '/path/to/somewhere/' -e 'pattern' -r或-R是递归的, -n是行号,并且 -w表示匹配整个单词。 可以添加-l (小写L)以仅给出匹配文件的文件名。 -e是搜索期间使用的模式 连同这些,-- --exclude ,-- --include ,-- --exclude-dir标志可用于有效搜索: 这只会搜索扩展名为.c或.h的文件: grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern" 这将排除搜索以.o扩展名结尾的所有文件: grep
  • git diff:忽略某些正则表达式的删除或插入(git diff: ignore deletion or insertion of certain regex)
    问题 如果添加或删除了以下表达式,我正在尝试使用git diff查找特定文件类型的两个版本之间的git diff : (****) 根据 git diff Documentation 参数-G是我正在寻找的。 所以我尝试了以下方法: git diff -G '\(\*\*\*\*\)' -- *.fileEnding 不幸的是它不起作用并且文件中的所有其他差异也被返回。 顺便说一句,我对正则表达式不是很熟悉。 编辑:我认为需要对我的问题更具体一点:现在我有以下情况:一个文件有与正则表达式匹配的更改和不匹配的更改。 在我的脚本中,我试图做这样的事情(伪代码): if((git diff -G '\(\*\*\*\*\)' -- *.fileEnding)==(git diff -- *.fileEnding)) print "Only changes in (****)"; 如果某些文件仅在 (****) 中有更改而其他文件有不同的更改,则它可以正常工作。 但是一旦一个文件同时具有这两个文件,它就不起作用 回答1 TL; 博士 Git 的git diff不会那样做。 长解释 该文档具有误导性。 -G参数对git diff完全没有作用。 相反, -G实际上是git log的参数(及其姊妹命令git rev-list以及任何调用这些命令的命令;但我认为最好仅从git log角度考虑它)。
  • Git-如何查看方法/函数的更改历史记录?(Git - how do I view the change history of a method/function?)
    问题 因此,我找到了有关如何查看文件更改历史记录的问题,但是此特定文件的更改历史记录非常庞大,我实际上只对特定方法的更改感兴趣。 那么是否有可能仅查看该特定方法的更改历史记录? 我知道这将需要git来分析代码,并且不同语言的分析也会有所不同,但是大多数语言中的方法/函数声明看起来非常相似,所以我认为也许有人实现了此功能。 我目前使用的语言是Objective-C,我目前使用的SCM是git,但是我想知道此功能是否适用于任何SCM /语言。 回答1 最新版本的git log学习了-L参数的一种特殊形式: -L:<函数名>:<文件> 跟踪<file>由"<start>,<end>" (或函数名称regex <funcname> )给出的行范围的演变。 您不得提供任何pathspec限制器。 当前,这仅限于从单个修订版本开始的遍历,即,您只能给出零个或一个正修订版本参数。 您可以多次指定此选项。 ... 如果用“:<funcname>”代替<start>和<end> ,则它是一个正则表达式,表示从与<funcname>匹配的第一个funcname行到下一个funcname行的范围。 “:<funcname>”从上一个-L范围的末尾(如果有)搜索,否则从文件的开头搜索。 “^:<funcname>”从文件的开头开始搜索。 换句话说:如果您要求Git git log -L
  • 使用正则表达式查找哈希表/字典/地图(Hashtable/dictionary/map lookup with regular expressions)
    问题 我试图弄清楚是否有一种相当有效的方法来在字典(或散列,或地图,或任何您喜欢的语言所称的)中执行查找,其中键是正则表达式,字符串是根据一组键。 例如(在 Python 语法中): >>> regex_dict = { re.compile(r'foo.') : 12, re.compile(r'^FileN.*$') : 35 } >>> regex_dict['food'] 12 >>> regex_dict['foot in my mouth'] 12 >>> regex_dict['FileNotFoundException: file.x does not exist'] 35 (显然上面的例子不能像用 Python 写的那样工作,但这是我希望能够做的事情。) 我可以想到一种天真的方法来实现这一点,其中我遍历字典中的所有键并尝试将传入的字符串与它们进行匹配,但随后我失去了哈希映射的 O(1) 查找时间和取而代之的是 O(n),其中 n 是我字典中的键数。 这可能是一个大问题,因为我预计这本字典会变得非常大,我需要一遍又一遍地搜索它(实际上我需要为我在文本文件中读取的每一行迭代它,并且文件大小可达数百兆字节)。 有没有办法在不诉诸 O(n) 效率的情况下实现这一点? 或者,如果您知道一种在数据库中完成此类查找的方法,那也会很棒。 (任何编程语言都可以——我使用的是
  • 使用Emacs递归查找并替换尚未打开的文本文件(Using Emacs to recursively find and replace in text files not already open)
    问题 作为此问题的后续措施,它试图找出如何做这样的事情,这应该很容易,特别是这使我不再习惯于使用Emacs,而是启动了我已经熟悉的编辑器。 我在编辑多个文件时经常使用此示例。 在Ultraedit中,我先执行Alt + s,然后显示一个带有以下选项的对话框:查找(包括使用多行正则表达式),替换为,在文件/类型中,目录,区分大小写,仅匹配整个单词,列表更改的文件和搜索子目录。 通常,我将首先使用鼠标单击并拖动以选择要替换的文本。 仅使用Emacs本身(在Windows XP上),而不调用任何外部实用程序,如何在某些文件夹及其下所有文件夹的*.c和*.h文件中,用bar \ nbaz替换所有foo \ nbar。 也许Emacs并不是执行此操作的最佳工具,但是如何用最少的命令轻松完成呢? 回答1 Mx find-name-dired :将提示您输入根目录和文件名模式。 对于找到的所有文件,按t键以“切换标记”。 按Q以“在文件中查询替换...”:系统将提示您输入查询/替换正则表达式。 与query-replace-regexp : SPACE替换并移至下一个匹配项, n跳过匹配项,依此类推。 按Cx s保存缓冲区。 (然后您可以按y , n或!一次保存所有内容) 回答2 Mx find-name-dired RET 所有文件可能需要一些时间才能出现在列表中,滚动到底部( M-> )
  • 字符串中大写字母的正则表达式(Regular Expression for UpperCase Letters In A String)
    问题 对于我的生活,我无法弄清楚为什么这个正则表达式不起作用。 它应该在给定的字符串中找到大写字母并给我计数。 欢迎任何想法。 下面是单元测试代码: public class RegEx { @Test public void testCountTheNumberOfUpperCaseCharacters() { String testStr = "abcdefghijkTYYtyyQ"; String regEx = "^[A-Z]+$"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(testStr); System.out.printf("Found %d, of capital letters in %s%n", matcher.groupCount(), testStr); } } 回答1 您没有调用matches或在匹配器上find 。 它没有做任何工作。 getGroupCount是错误的调用方法。 您的正则表达式没有捕获组,即使有,也不会给您字符数。 您应该使用find ,但使用不同的正则表达式,没有锚点。 我还建议使用正确的 Unicode 字符类: "\\p{Lu}+" 。 在while (m.find())循环中使用它,并在每一步累积从m.group(0)
  • Python网络爬虫【2】--正则表达式、Scrapy库的使用
    单元四、信息组织与提取方法 1)信息标记的三种方式 XML, JSON, YAML 2)信息提取的一般方法 方法一:完整解析信息的标记形式,再提取关键信息 XML JSON YAML 需要标记解析器 例如:bs4库的标记树遍历 优先:信息解析准确 缺点:提取过程繁琐,速度慢 方法二:无标记形式,直接搜索关键信息 搜索 对信息的文本查找函数即可。 优点:提取过程简单,速度较快 缺点:提取结果准确性与信息内容有关 方法三:融合方法:结合形式解析与搜索方法,提取关键信息 XML JSON YAML 搜索 需要标记解析器及文本查找函数 实例:提取HTML中所有的URL链接 思路;1)搜索到所有的标签 ​ 2)解析标签格式,提取href后的链接内容 3)基于bs4的HTML内容查找方法 <tag>.fint_all(name, attrs, recursive, string, **kwargs) 其等价于<tag>(..) 返回: 一个列表类型,存储查找的结果 选项: name: 对标签名称的检索字符串 attrs: 对标签属性值的检索字符串,可标注属性索引 recursive: 是否对子孙全部索引,默认True string: <>...</>中字符串区域的检索字符串 **kwargs: 参数name: >>> soup.find_all('a') ## 查找所有a标签 >>> soup
  • 如何查找 Java 字符串是否包含 X 或 Y 并包含 Z(How to find if a Java String contains X or Y and contains Z)
    问题 我很确定正则表达式是要走的路,但每当我尝试计算特定的正则表达式时,我的头都会受伤。 如果 Java 字符串(包含文本“错误”或文本“警告”)和(包含文本“解析”),其中所有匹配项都不区分大小写,我需要什么正则表达式? 编辑:我已经提出了一个具体案例,但我的问题更普遍。 可能还有其他子句,但它们都涉及匹配特定单词,忽略大小写。 可能有 1、2、3 或更多子句。 回答1 如果您对正则表达式不是 100% 满意,请不要尝试将它们用于此类用途。 只需这样做: string s = test_string.toLowerCase(); if (s.contains("parsing") && (s.contains("error") || s.contains("warning")) { .... 因为当你在六个月后回到你的代码时,你会一目了然。 编辑:这是一个正则表达式来做到这一点: (?i)(?=.*parsing)(.*(error|warning).*) 但它相当低效。 对于具有 OR 条件的情况,在可读性和效率方面,搜索几个简单的正则表达式并将结果以编程方式与 Java 结合的混合方法通常是最好的。 回答2 如果你真的想使用正则表达式,你可以使用正向前瞻运算符: (?i)(?=.*?(?:ERROR|WARNING))(?=.*?parsing).* 例子: Pattern
  • Java字符串处理
    文章目录 字符串大小写转换(toLowerCase()和toUpperCase())去除字符串中的空格(trim())截取(提取)子字符串(substring())分割字符串(spilt())**字符串的替换(replace()、replaceFirst()和replaceAll())**字符串比较(equals() )字符串查找(3种方法)StringBuffer类详解String、StringBuffer和StringBuilder类的区别正则表达式详解Pattern类和Matcher类的使用参考内容 字符串是 Java 中特殊的类,使用方法像一般的基本数据类型,被广泛应用在 Java 编程中。Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个 String 类来创建和操作字符串。 在 Java 中定义一个字符串最简单的方法是用双引号把它包围起来。这种用双引号括起来的一串字符实际上都是 String 对象,如字符串“Hello”在编译后即成为 String 对象。因此也可以通过创建 String 类的实例来定义字符串。 不论使用哪种形式创建字符串,字符串对象一旦被创建,其值是不能改变的,但可以使用其他变量重新赋值的方式进行更改。 字符串大小写转换(toLowerCase()和toUpperCase()) String 类的 toLowerCase()