5 releases (3 breaking)

Uses old Rust 2015

0.4.0 Jul 22, 2018
0.3.1 Mar 24, 2018
0.3.0 Sep 9, 2017
0.2.0 Jan 16, 2017
0.1.0 Mar 1, 2016

#100 in Text processing

Download history 344653/week @ 2023-11-21 399229/week @ 2023-11-28 389563/week @ 2023-12-05 381265/week @ 2023-12-12 342446/week @ 2023-12-19 211362/week @ 2023-12-26 369883/week @ 2024-01-02 401499/week @ 2024-01-09 442753/week @ 2024-01-16 449811/week @ 2024-01-23 457375/week @ 2024-01-30 439968/week @ 2024-02-06 433287/week @ 2024-02-13 511173/week @ 2024-02-20 497174/week @ 2024-02-27 377193/week @ 2024-03-05

1,893,776 downloads per month
Used in 1,234 crates (9 directly)

MIT license

32KB
864 lines

Difflib Build Status

Port of Python's difflib library to Rust. It's provide all necessary tools for comparing word sequences.

Installation

Simply add difflib to your dependencies block in Cargo.toml

[dependencies]
difflib = "0.4.0"

Documentation

Documentation is available at https://github.com/DimaKudosh/difflib/wiki

Example

extern crate difflib;

use difflib::differ::Differ;
use difflib::sequencematcher::SequenceMatcher;

fn main() {
    // unified_diff
    let first_text = "one two three four".split(" ").collect::<Vec<&str>>();
    let second_text = "zero one tree four".split(" ").collect::<Vec<&str>>();
    let diff = difflib::unified_diff(
        &first_text,
        &second_text,
        "Original",
        "Current",
        "2005-01-26 23:30:50",
        "2010-04-02 10:20:52",
        3,
    );
    for line in &diff {
        println!("{:?}", line);
    }

    //context_diff
    let diff = difflib::context_diff(
        &first_text,
        &second_text,
        "Original",
        "Current",
        "2005-01-26 23:30:50",
        "2010-04-02 10:20:52",
        3,
    );
    for line in &diff {
        println!("{:?}", line);
    }

    //get_close_matches
    let words = vec!["ape", "apple", "peach", "puppy"];
    let result = difflib::get_close_matches("appel", words, 3, 0.6);
    println!("{:?}", result);

    //Differ examples
    let differ = Differ::new();
    let diff = differ.compare(&first_text, &second_text);
    for line in &diff {
        println!("{:?}", line);
    }

    //SequenceMatcher examples
    let mut matcher = SequenceMatcher::new("one two three four", "zero one tree four");
    let m = matcher.find_longest_match(0, 18, 0, 18);
    println!("{:?}", m);
    let all_matches = matcher.get_matching_blocks();
    println!("{:?}", all_matches);
    let opcode = matcher.get_opcodes();
    println!("{:?}", opcode);
    let grouped_opcodes = matcher.get_grouped_opcodes(2);
    println!("{:?}", grouped_opcodes);
    let ratio = matcher.ratio();
    println!("{:?}", ratio);
    matcher.set_seqs("aaaaa", "aaaab");
    println!("{:?}", matcher.ratio());
}

No runtime deps